【发布时间】:2012-01-01 15:31:28
【问题描述】:
我正在使用 python 的 mongoengine 来查询 MongoDB,并且很喜欢它,但我遇到了 advanced query 的问题。
这是我的模型
class ContentItem(Document):
account = ReferenceField(Account)
creator = ReferenceField(User)
public = BooleanField(default=False)
last_used = DateTimeField(default=datetime.now)
我想查询属于特定帐户的所有ContentItem,这些帐户要么由登录用户创建,要么是公开的。这是我写的查询
query = ContentItem.objects.filter( (Q(account=account) & Q(public=True)) | (Q(account=account) & Q(creator=logged_in_user)) ).order_by('-last_used')
或:
query = ContentItem.objects.filter( Q(account=account) & ( Q(public=True) | Q(creator=logged_in_user) ) ).order_by('-last_used')
但这些似乎是 XOR,如果是 public 或 creator,但不是两者兼而有之。这是预期的吗?
我是否忽略了什么?我应该直接使用 mongodb 而不是 mongoengine 来执行此操作吗?
我目前的解决方法是进行两个不同的查询并合并结果,但随着内容项目的数量变大,结果需要很长时间才能返回,因为我需要先获取所有项目才能订购它们,因此失去(django)分页结果的所有好处。
【问题讨论】:
标签: python mongodb mongoengine