Pymongo 或条件过滤查询

0 投票
1 回答
1608 浏览
提问于 2025-04-30 01:44

我在用pymongo操作mongoDB的时候遇到了一点问题,特别是在使用“或”条件的时候。我看了很多类似的帖子,但不知道为什么我的代码就是不行。

        goodShots = coll.find({"Tag" : "zombiegame", "Meta.levelState":"NORMAL_MODE", "$or":[
            {"Meta.zombiesInLOS":{'$gt':0}}, {"Meta.zombiesInSLOS":{'$gt':0}},
             {"Meta.helpersInLOS":{'$gt':0}}, {"Meta.helpersInSLOS":{'gt':0}}
            ]})

        goodShot01 = coll.find({"Tag" : "zombiegame", "Meta.levelState" : "NORMAL_MODE", "Meta.zombiesInLOS" : {"$gt" : 0}})
        goodShot02 = coll.find({"Tag" : "zombiegame", "Meta.levelState" : "NORMAL_MODE", "Meta.zombiesInSLOS" : {"$gt" : 0}})
        goodShot03 = coll.find({"Tag" : "zombiegame", "Meta.levelState" : "NORMAL_MODE", "Meta.helpersInLOS" : {"$gt" : 0}})
        goodShot04 = coll.find({"Tag" : "zombiegame", "Meta.levelState" : "NORMAL_MODE", "Meta.helpersInSLOS" : {"$gt" : 0}})

第一个查询'goodShots'理论上应该返回满足'goodShot01-04'中所有其他条件的结果。但是,它返回的是0。而'goodShot01-04'的结果却是大于0的。

暂无标签

1 个回答

0

如果我插入4个文档,像这样:

{ 
    "Tag" : "zombiegame",
    "Meta" : {
        "levelState" : "NORMAL_MODE",
        "zombiesInLOS" : 1
    }
}

我在Meta的最后一个字段上尝试了4种不同的可能性,然后我用goodShots这个查询找到了所有四个文档,并且每个文档都对应goodShot01goodShot04。我发现我在$or的最后一个条件里漏加了一个$符号,这样才找到了4个文档,而不是3个。也许你可以再检查一下,确保你输入的查询是正确的?

撰写回答