Python 3.x 当您想要读取数据时,是否可以在mongoengine中使用逻辑运算符
我使用python 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查询中使用逻辑运算符的方法 稍后,文档警
我知道我们可以使用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)