Python 如何在mongodb中使用“$或”

Python 如何在mongodb中使用“$或”,python,mongodb,pymongo,Python,Mongodb,Pymongo,我是MongoDB新手,在使用$或操作符时遇到了一个问题 这是我的密码: for element in table1.find(): total += 1 result = table2.find_one({'guanZhi' : element['guanZhi'], 'name' : element['name'],

我是MongoDB新手,在使用
$或
操作符时遇到了一个问题

这是我的密码:

for element in table1.find():
        total += 1
        result = table2.find_one({'guanZhi' : element['guanZhi'], 
                                  'name'    : element['name'],
                                  'minZu'   : element['minZu'],
                                  'keJu'    : element['keJu']})

        if result and (element['qiFen'] == result['qiFen'] or 
                       element['qiFen'] == result['qiFenHuo']):
            pass
        else:
            failed += 1
关于
(element['qiFen']==result['qiFen']或element['qiFen']==result['qifenhou'])
,我想使用
$或
,但我不知道如何编写代码

我改成这样:

for element in table1.find({'ji': ""}):
        if table2.find_one({'guanZhi' : element['guanZhi'],
                            'name'    : element['name'],
                            'minZu'   : element['minZu'],
                            'nian'    : element['nian'],
                            '$or'     : [{'qiFen' : element['qiFen']}, {'qiFenHuo': element['qiFen']}]}):
            match.write(formatElement(element))
        else:
            no_match.write(formatElement(element))
            failed += 1
db.inventory.find( {
    $and : [
        // YOUR CODE HERE,
        { $or : [ { sale : true }, { qty : { $lt : 20 } } ] }
    ]
} )
但是我很困惑,这个代码看起来还好吗? 我想:


如果我理解正确,我认为您需要同时包含$AND运算符和$OR运算符

我知道你想得到的是: “您指定的文档” 和({'qiFen':元素['qiFen']} 或“七分火”:元素['qiFen']})

如果是的话。。。尝试将您的代码与以下内容组合:

for element in table1.find({'ji': ""}):
        if table2.find_one({'guanZhi' : element['guanZhi'],
                            'name'    : element['name'],
                            'minZu'   : element['minZu'],
                            'nian'    : element['nian'],
                            '$or'     : [{'qiFen' : element['qiFen']}, {'qiFenHuo': element['qiFen']}]}):
            match.write(formatElement(element))
        else:
            no_match.write(formatElement(element))
            failed += 1
db.inventory.find( {
    $and : [
        // YOUR CODE HERE,
        { $or : [ { sale : true }, { qty : { $lt : 20 } } ] }
    ]
} )

对不起,为什么标签
javascript
在这里?看起来不错!你在执行过程中遇到过任何问题吗?我已经更新了我的question@BlackMamba即使是最新的看起来也不错!你的意思是“
”$或“:[{'qiFen':element['qiFen']},{'qifenhou':element['qiFen']}]
是对的吗?只要它做了你想要它做的事情,它看起来就很好。这意味着,即使没有异常,也需要确保逻辑是您想要的(否则,这将是一个bug)。现在,您告诉Mongo找到满足两个选项之一的第一个文档。。这两个选项类似,只有一个字段不同。但是,即使这两个版本都存在,您也只能获得Mongo找到的第一个版本。当然,你必须用Mongo语法来写。