2012-05-09 49 views
1

我使用MongoId運行下面的查詢mongoid destroy_all隨後與計數結果的緩存結果

當通過給出的答案爲 question我明白Mongoid

不緩存任何查詢閱讀現在

PartPriceRecord.destroy_all

PartPriceRecord.count() ==> 31721

如何這是可能的,我只是刪除所有的記錄,這讓我感覺蒙戈是緩存某些查詢

在我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')}) 

表示索引已創建並且記錄正在被刪除。

怎麼讓蒙戈是緩存查詢是否有來自mongoid任何方法來清除緩存蒙哥如果 蒙戈是緩存查詢

+0

只是一個說明重新啓動我的mongo服務器,但仍然是同樣的問題。現在這看起來不像緩存什麼是任何人都可以解釋 – Viren

+0

進一步調查是更令人震驚的運行PartPriceRecord.first或PartPriceRecord.find(:所有).first返回零但PartPriceRecord。find(:all)[0]返回一個有效結果 – Viren

回答

1

警告:我不是一個mongoid用戶。

怎麼讓蒙戈是緩存查詢

蒙戈本身並沒有做這樣的任何緩存。

如果你看一下在數據庫執行查詢:

$ 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" : "" } 

在DB直接展望將允許您準確地知道/理解發出的查詢以及是否存在緩存 - 它在哪裏(它不會在數據庫本身中)。

然而,則差使到查詢你在問題中顯示日誌是.remove({:_id=>BSON::ObjectId('4fa39b35edd7f4306b0042bf')})將最多一個對象中刪除,上面({})的條件將截斷集合。

查看destroy all的文檔,它會在每個刪除的行上運行回調 - 這可能意味着它一次刪除一個(其中30k行將花費大量時間)。您可以使用delete all,它會(我假設)直接發出查詢來刪除所有行(db.part_price_records.remove({}))。如果您需要銷燬回調,您需要調查爲什麼您的代碼顯然只找到一行要刪除,或者哪個回調會中止其他現有行的刪除。

+0

是delete_all按預期工作我不知道y destory_all工作不一樣,雖然我沒有和回調。謝謝,但gr8的幫助 – Viren

+0

我不知道是誰責怪mongoid或mongodb知道創建一個新的記錄是不反映在計數也不能通過查詢訪問它查詢此https://github.com/meetme2meat/mongoid-screenshot/raw/master /Screenshot-1.png – Viren