我在使用自定义对象作为我在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,这正是我需要的答案:-)如果你作出回答,我会接受它。 –