我正在使用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')
但这些似乎是异或,如果其中一个是public
,或者creator
,但不是两者都是.这是预期的吗?
我是不是忽略了什么?我应该直接用mongodb而不是mongoengine来做这件事吗?
我目前的解决方法是进行两个不同的查询并合并结果,但随着内容项的#越来越大,结果需要很长时间才能恢复,因为我需要在订购之前获取所有项目,从而失go (django)分页结果的所有好处.