我在使用自定義對象作爲我在MongoDb中的_id
值時遇到了一些問題。在MongoDb中使用對象作爲_id導致查詢上的collscan
我存儲在_id的物體看起來是這樣的:
"_id" : {
"EDIEL" : "1010101010101",
"StartDateTicks" : NumberLong(636081120000000000)
}
現在,當我執行以下查詢:
.find({
"_id.EDIEL": { $eq: "1010101010101" },
"_id.StartDateTicks": { $gte: 636082776000000000, $lt: 636108696000000000 }
}).explain()
我做了COLLSCAN
。我無法弄清楚爲什麼。是否因爲我沒有對_id
對象與對象查詢?
有沒有人知道我在做什麼錯在這裏? :-)
編輯:
試圖創建包含EDIEL
和StartDateTicks
字段的化合物指數,再次運行查詢,現在,它使用索引,而不是一個列掃描。雖然這有效,但避免使用額外的索引並僅僅使用_id(因爲它基本上是一個「免費」索引)仍然很好。所以,問題仍然存在:爲什麼我不能查詢_id.EDIEL
和_id.StartDateTicks
並使使用索引?
你的問題是什麼導致COLLSCAN?你懷疑是在自定義_ID?如果是的話,那麼你猜測它是錯誤的,因爲你調用了.explain()方法,該方法又執行COLLSCAN。請參閱https://docs.mongodb.com/v3.2/reference/explain-results/ –
您需要分別對兩個字段進行索引,因爲索引不能在嵌入式文檔中。 – hyades
謝謝@hyades,這正是我需要的答案:-)如果你作出回答,我會接受它。 –