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 仅作为管道中的第一阶段有效

Mongoengine 和 Pymongo?

mongoengine简单使用

使用 mongoengine 将多文档插入到 mongodb

Python Mongoengine:如何绕过无法通过验证的文档以避免崩溃