Mongodb mongoid destroy_在缓存结果中后跟计数结果

Mongodb mongoid destroy_在缓存结果中后跟计数结果,mongodb,mongoid,Mongodb,Mongoid,我使用MongoId阅读我理解的MongoId的给定答案 不缓存任何查询 现在运行下面的查询时 PartPriceRecord.destroy\u all PartPriceRecord.count() =>31721 我只是删除了所有记录,这让我感觉mongo正在缓存某个查询 在我的mongoid查询日志中,我可以看到每删除两个查询操作 MONGODB (0ms) decisiv_staging['system.indexes'].insert([{:name=>"part_number

我使用MongoId阅读我理解的MongoId的给定答案

不缓存任何查询

现在运行下面的查询时

PartPriceRecord.destroy\u all

PartPriceRecord.count() =>31721

我只是删除了所有记录,这让我感觉mongo正在缓存某个查询

在我的mongoid查询日志中,我可以看到每删除两个查询操作

MONGODB (0ms) decisiv_staging['system.indexes'].insert([{:name=>"part_number_1", :ns=>"decisiv_staging.part_price_records", :key=>{"part_number"=>1}, :unique=>true}])
MONGODB (0ms) decisiv_staging['part_price_records'].remove({:_id=>BSON::ObjectId('4fa39b35edd7f4306b0042bf')})
表示索引已创建,记录已删除

那么为什么mongo要缓存查询mongoid有没有办法清除mongo缓存
如果mongo正在缓存查询,请注意:我不是mongoid用户

那么为什么mongo要缓存查询呢

Mongo本身不做这样的缓存

如果查看数据库上执行的查询:

$ mongodb viren
> db.setProfilingLevel(0); 
> db.system.profile.drop();  
> db.setProfilingLevel(2);
然后执行代码,您将在日志中看到类似的内容:

> db.system.profile.find()
{ "ts" : ISODate("2012-05-09T08:39:21.657Z"), "op" : "insert", "ns" : "viren.part_price_records", "millis" : 0, "client" : "127.0.0.1", "user" : "" }
{ "ts" : ISODate("2012-05-09T08:39:26.553Z"), "op" : "remove", "ns" : "viern.part_price_records", "query" : { }, "millis" : 0, "client" : "127.0.0.1", "user" : "" }
直接查看数据库可以让您确切地知道/理解发出了什么查询,以及是否存在缓存——缓存在哪里(它不会在数据库本身中)

然而,与您在问题中显示的查询日志的最大区别在于
.remove({:_id=>BSON::ObjectId('4fa39b35edd7f4306b0042bf'))
将最多删除一个对象,上面的条件(
{}
)将截断集合


在查看文档时,它会对每个已删除的行运行回调—这可能意味着它会一次删除一行(这将花费大量的时间)。您可以使用,它将(我假设)直接发出一个查询来删除所有行(
db.part\u price\u记录。而不是删除({})
)。如果需要销毁回调,则需要调查为什么代码显然只找到一行要删除,或者哪个回调正在中止对其他现有行的删除。

警告:我不是mongoid用户

那么为什么mongo要缓存查询呢

Mongo本身不做这样的缓存

如果查看数据库上执行的查询:

$ mongodb viren
> db.setProfilingLevel(0); 
> db.system.profile.drop();  
> db.setProfilingLevel(2);
然后执行代码,您将在日志中看到类似的内容:

> db.system.profile.find()
{ "ts" : ISODate("2012-05-09T08:39:21.657Z"), "op" : "insert", "ns" : "viren.part_price_records", "millis" : 0, "client" : "127.0.0.1", "user" : "" }
{ "ts" : ISODate("2012-05-09T08:39:26.553Z"), "op" : "remove", "ns" : "viern.part_price_records", "query" : { }, "millis" : 0, "client" : "127.0.0.1", "user" : "" }
直接查看数据库可以让您确切地知道/理解发出了什么查询,以及是否存在缓存——缓存在哪里(它不会在数据库本身中)

然而,与您在问题中显示的查询日志的最大区别在于
.remove({:_id=>BSON::ObjectId('4fa39b35edd7f4306b0042bf'))
将最多删除一个对象,上面的条件(
{}
)将截断集合


在查看文档时,它会对每个已删除的行运行回调—这可能意味着它会一次删除一行(这将花费大量的时间)。您可以使用,它将(我假设)直接发出一个查询来删除所有行(
db.part\u price\u记录。而不是删除({})
)。如果需要销毁回调,则需要调查为什么代码显然只找到一行要删除,或者哪个回调正在中止对其他现有行的删除。

只是一个注释重新启动了我的mongo服务器,但仍然存在相同的问题。现在这看起来不像是缓存,任何人都可以解释进一步的调查更令人震惊的是运行PartPriceRecord.first或PartPriceRecord.find(:all)。首先返回nil,但PartPriceRecord.find(:all)[0]返回有效结果只是一张便笺重新启动了我的mongo服务器,但仍然存在相同的问题。现在这看起来不像缓存是什么,任何人都可以解释进一步的调查更令人震惊的是运行PartPriceRecord.first或PartPriceRecord.find(:all)。first返回nil但PartPriceRecord.find(:all)[0]返回一个有效的结果删除所有工作如预期我不知道y删除所有工作都不一样虽然我也没有和回调。谢谢但gr8帮助我不确定该怪谁mongoid或mongodb知道创建新记录没有反映在计数中,也不能通过查询访问检查此是删除所有工作如预期我不知道I don’’我不知道破坏性的东西都不一样,虽然我也没有和回调。谢谢,但gr8帮助我不确定该怪谁mongoid或mongodb知道创建新记录不反映在计数中,我也不能通过查询访问它检查此项