使用MongoDB仅扫描集合中的x个实例

时间:2014-05-13 06:15:35

标签: python mongodb database

我有这种格式的集合:

{"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都已编入索引。

1 个答案:

答案 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