Python 3.x 当您想要读取数据时,是否可以在mongoengine中使用逻辑运算符

Python 3.x 当您想要读取数据时,是否可以在mongoengine中使用逻辑运算符,python-3.x,mongoengine,Python 3.x,Mongoengine,我使用python mongoengine 我想知道是否可以在对象中使用条件 例: 我知道我们可以使用Q类来进行查询,也可以使用json模式下的Raw来查询数据库,但我更喜欢对象(A和B或C)中的简单多条件。通常很难肯定某些事情无法完成,但我想这就是你问题的答案。如果您需要使用逻辑运算符,那么Q(或raw)似乎是最佳选择 关于更多细节,报告说: 如果需要使用and或此组合多个约束 通过Q类在MongoEngine中实现 这意味着Q是在MongoEngine查询中使用逻辑运算符的方法 稍后,文档警

我使用python mongoengine

我想知道是否可以在对象中使用条件

例:


我知道我们可以使用Q类来进行查询,也可以使用json模式下的Raw来查询数据库,但我更喜欢
对象(A和B或C)

中的简单多条件。通常很难肯定某些事情无法完成,但我想这就是你问题的答案。如果您需要使用逻辑运算符,那么Q(或raw)似乎是最佳选择

关于更多细节,报告说:

如果需要使用and或此组合多个约束 通过Q类在MongoEngine中实现

这意味着Q是在MongoEngine查询中使用逻辑运算符的方法

稍后,文档警告:

必须使用位运算符。不能使用或、和来组合 作为Q(a=a)或Q(b=b)的查询与Q(a=a)| Q(b=b)不同。作为 Q(a=a)等于真Q(a=a)或Q(b=b)与Q(a=a)相同

最后,在StackOverflow中询问了a,并指出

在Python中不可能重写和/或,相反,您可以 覆盖|/&。Q的源代码(mongoengine/queryset/visitor.py) 它的历史证明了这一点


简言之,您似乎无法覆盖or和and运算符,而Q是执行逻辑运算的推荐方式

gmauch
是正确的,处理逻辑组合的最佳方法是使用
Q

但是,对于您的特定示例,多个传递的关键字参数的默认逻辑是

所以,

personnes =  Person.objects(name="bob", salary=70)
将仅返回名为“bob”且薪水为70的
个人
文档。它的功能相当于
(name==“bob”)和(salary==70)

但是,对于除非常简单的
序列和
'd条件以外的任何情况,请使用
Q


而且,是的,文档中对隐式

也没有提及,如果您使用的是Django,请注意。Django和MongoEngine都有一个
Q
。确保您使用的是正确的。:)
personnes =  Person.objects(name="bob", salary=70)