Mongoengine Q 类“或”
Posted
技术标签:
【中文标题】Mongoengine Q 类“或”【英文标题】:Mongo engine Q class 'OR' 【发布时间】:2013-11-16 00:11:57 【问题描述】:我有一个用户的 objectID 列表
friends = ['someID', 'someID']
我编写了一个查询集来获取与我在朋友列表中的这些 objectID 相关联的用户。
u = UserAccount.objects.filter(Q(id = friends[0]) or Q(id = friends[1]))
现在u.to_json()
尽管两个对象 ID 都存在于数据库中,但仅输出一个 UserAccount 对象
所以我通过分离查询来检查它,现在每个查询集都按预期返回了一个 UserAccount 对象。
u = UserAccount.objects.filter(Q(id = friends[0]))
v = UserAccount.objects.filter(Q(id = friends[1]))
可能有什么问题? “或”有问题吗?
【问题讨论】:
【参考方案1】:修复:
UserAccount.objects.filter(Q(id = friends[0]) | Q(id = friends[1]))
【讨论】:
'&' 和 '|'不起作用...见:***.com/questions/8189702/… 您刚刚发布的 SO 中的答案已过时,我认为即使一开始也不是正确的。你不能在 Python 中覆盖and
or
行为,但你可以覆盖 |
,&
result = UserAccount.objects( Q(first_name__istartswith = query[0]) 和 Q(last_name__istartswith = query[1])).only('first_name', 'last_name', 'user_name') 我'我也在使用这个查询,这里 'and' 工作正常,而 '&' 不起作用
@Praveen 但是结果和result = UserAccount.objects( Q(first_name__istartswith = query[0])).only('first_name', 'last_name', 'user_name')
一样吗?
不,结果中添加了更多用户【参考方案2】:
要匹配列表中的任何内容,您可以使用in
query operator:
UserAccount.objects.filter(id__in=friends)
【讨论】:
以上是关于Mongoengine Q 类“或”的主要内容,如果未能解决你的问题,请参考以下文章
MongoDB:运行更快的查询,这更好 Pymongo 或 MongoEngine
mongoengine 中的聚合返回 $geoNear 仅作为管道中的第一阶段有效