我對 Mongo 有一個特殊的問題。我們有一個具有以下結構的 800k 文檔集合。{"_id" : ObjectId("5bd844199114bab3b2c19fab"),"u" : 0,"c" : 0,"iden" : "343754856","name" : "alan","email" : "[email protected]","mobile" : "987654321093456","expires" : ISODate("2018-11-29T11:44:25.453Z"),"created" : ISODate("2018-10-30T11:44:25.453Z")}我們已經建立了索引iden,并且name我們通常會在其上進行查詢。我們嘗試了兩種類型的查詢。db.Collection.find({"iden": "343754856", "name": "alan", "created":{"$gt": ....}).count()其中“created”是一個未索引的字段。db.Collection.find({"iden": "343754856", "name": "alan"})并遍歷所有記錄以根據created.然而,MongoDB 似乎在執行第二個查詢時花費了大量時間,而它應該是對 1 的優化。關于這里出了什么問題的任何線索?我們正在使用 Go 庫。
1 回答

慕雪6442864
TA貢獻1812條經驗 獲得超5個贊
第二個版本怎么可能是第一個版本的優化?
您的第一個查詢從 MongoDB 服務器檢索一個數字:查詢結果的總數。當您的第二個版本獲取所有匹配的文檔時,您在“客戶端”端進行計數。
相信我,MongoDB 可以像在 Go 客戶端中一樣快地在內部計算結果文檔。讓 MongoDB 服務器發送結果、獲取結果并在客戶端解組它們需要更多的時間(取決于很多因素)。
請注意,如果您有一個包含"iden"
and的復合索引"name"
,即使您添加了更多過濾器(如"created"
您的示例),該索引仍可能被使用,但 MongoDB 必須迭代部分結果以應用查詢的其余部分。要查看索引是否被使用,請執行以下命令:
db.Collection.find( {"iden": "343754856", "name": "alan", "created": {"$gt": ....} ).explain()
- 1 回答
- 0 關注
- 114 瀏覽
添加回答
舉報
0/150
提交
取消