【问题标题】:Mongo: combining AND and ORMongo:结合 AND 和 OR
【发布时间】:2012-11-03 16:22:02
【问题描述】:

我想返回那些必须同时满足 AND 和 OR 条件的记录。 AND 条件检查该值是否与集合外部的外部值匹配,然后我检查它是否匹配 OR 条件中的一个或两个。

这是我使用 pymongo 的查询:

 cursor = coll.find(
                { "$and" : [
                        {"term" : 1} == events, 
                        { "$or" : [
                                {"coordinates.type" : "Point"}, 
                                {"place.full_name" : {"$ne" : None}}
                        ]}
                    ]}, 
                           {"coordinates" : 1, "place.full_name" : 1}, 
                            tailable = True, timeout  = False )

我可以自己运行查询的 OR 部分。相反,我收到一条错误消息:

OperationFailure: database error: $and/$or elements must be objects

我是 Mongo 和 Python 的新手。

非常感谢

【问题讨论】:

    标签: python mongodb pymongo database


    【解决方案1】:

    此行无效:

    {"term" : 1} == events
    

    不确定这里的意图是什么,但如果您删除 '== events' 它应该是一个有效的查询参数

    【讨论】:

    • 这就是为什么 mongodb 声明事件不是对象的原因。如何将事件的值与“术语”的值进行比较?
    • 如果我删除了 '== events' 那么它就不能用术语值来评估事件值。这就是我想要实现的目标。
    • 假设 'events' 是一个字段,并且您想查找其中 'terms' == some_value AND 'events' == some_value 的文档,您可以简单地运行 col.find({'terms': some_value, '事件': some_value}) 。如果不是这种情况,请更详细地说明您的数据结构以及您希望通过查询实现的目标。
    • events 是来自 html 表单的获取请求并存储到列表中。术语有一个值,例如“奥巴马”,如果事件值也是奥巴马,那么我正在将数据写入网络浏览器。但是 events 的值存储在集合之外。
    • 好的,如果 events 是一个列表,例如。 ['Obama', 'Romney'] 并且您想查看 term 的值在该列表中的文档,那么查询 col.find({'term': '$in':events}) 将返回其中的文档term 的值在事件列表中。
    猜你喜欢
    • 2016-04-13
    • 2023-03-22
    • 1970-01-01
    • 2018-06-03
    • 2020-12-17
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多