【问题标题】:PyMongo cannot get $and + $or to workPyMongo 无法让 $and + $or 工作
【发布时间】:2015-02-07 01:45:57
【问题描述】:

我正在使用 python 3、mongo 版本 2.6.4 和 pymongo 版本 2.7。我无法让以下查询工作...... 这个查询是我直接放入 mongo shell 的:

db.zoo.find({'animal': {'$and': [{'$ne': 'dog'}, {'$ne': 'cat'}]}}).limit(20).pretty()

(限制和漂亮仅在我测试时存在)
这是我得到的错误:

error: {
    "$err" : "Can't canonicalize query: BadValue unknown operator: $and",
    "code" : 17287
}

我在使用 $or 运算符时收到同样的错误:

error: {
    "$err" : "Can't canonicalize query: BadValue unknown operator: $or",
    "code" : 17287
}

我确实找到了一个已提出的 Jira,但我不确定它是否与同一问题有关 https://jira.mongodb.org/browse/SERVER-12981

我已经尝试了所有我能想到的组合,但我无法解决这个问题。

提前致谢。

编辑: 我确实尝试过 $nin 但它什么也没返回。即使这是 Mongo shell 查询,我也无法让它在 PyMongo 中工作,并且收到相同的错误

【问题讨论】:

    标签: mongodb python-3.x pymongo


    【解决方案1】:

    在这种情况下,您可以使用implicit and。以下查询应该可以工作

    db.zoo.find({'animal': {$ne: 'dog', $ne: 'cat'}})
    

    你可以写and explicit

    db.zoo.find({$and: [{'animal': {$ne: 'dog'}},{'animal': {$ne: 'cat'}}]})
    

    【讨论】:

    • 辛苦了!谢谢! :D
    • 第一个如何工作?第二个 $ne 不会覆盖同一个对象中的第一个吗?例如,如果您执行 console.log({$ne: 'dog', $ne: 'cat'})。你只会看到“{$ne: 'cat'}”。
    猜你喜欢
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 2013-05-09
    • 2021-06-04
    • 2017-12-30
    • 2018-08-18
    • 1970-01-01
    • 2019-01-18
    相关资源
    最近更新 更多