我有这种格式的集合:
{"Name":"Alex", "Work":"Mgr", "Hobbies":["Music", "Sports"]},
{"Name":"Jake", "Work":"Professor", "Hobbies":["Cycling", "Singing", "Music"]}
... and many more
现在,将Music
作为hobbies
db.office.find({"Hobbies":"Music"})
现在,如何在不使用X
的情况下将扫描限制在上述集合中的Music
limit
实例
注意:所有Hobbies
都已编入索引。
答案 0 :(得分:1)
您可以提供$maxScan
作为游标修饰符。
稍微添加您的数据:
{ "Name" : "Alex", "Work" : "Mgr", "Hobbies" : [ "Music", "Sports" ] }
{ "Name" : "Jake", "Work" : "Professor", "Hobbies" : [ "Cycling", "Singing", "Music" ] }
{ "Name" : "Bill", "Work" : "Student", "Hobbies" : [ "XBox" ] }
{ "Name" : "Ben", "Work" : "Student", "Hobbies" : [ "Music" ] }
发出如下查询:
db.office.find({ Hobbies: "Music"})._addSpecial("$maxScan", 2)
只返回第一个结果。并解释输出:
{
"cursor" : "BtreeCursor Hobbies_1",
"isMultiKey" : true,
"n" : 1,
"nscannedObjects" : 1,
"nscanned" : 2,
"nscannedObjectsAllPlans" : 1,
"nscannedAllPlans" : 2,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"indexBounds" : {
"Hobbies" : [
[
"Music",
"Music"
]
]
},
"server" : "ubuntu:27017",
"filterSet" : false
}
显示尽管有更多可能的匹配,但我们并未查看所有匹配项。
另请参阅pymongo文档中的cursor tools。