【发布时间】:2019-03-27 03:35:09
【问题描述】:
假设有简单的User 和Post 模型。
class User(Document):
user_id = StringField(primary_key=True)
gender = StringField(default='M')
class Post(Document):
user = ReferenceField(User)
body = StringField()
if __name__ == '__main__':
hide = User(user_id='hide', gender='M').save()
john = User(user_id='john', gender='M').save()
test = User(user_id='test', gender='W').save()
admin = User(user_id='admin', gender='W').save()
Post(user=hide, body='hide post').save()
Post(user=john, body='john post').save()
Post(user=test, body='test post').save()
Post(user=admin, body='admin post').save()
hide = User.objects(user_id='hide').first()
posts = Post.objects(user__ne=hide)
for post in posts:
print(post.body)
结果是
约翰邮报 测试站 管理员发帖
我触发了条件 user__ne=hide,所以除了 hide 的帖子外,所有帖子都打印了。
在这种情况下,我怎样才能添加更多的条件喜欢,gender='W'?
下面的代码是我试过的结果。
posts = Post.objects(user__ne=hide, user__gender__ne='M')
和
from mongoengine.queryset.visitor import Q
posts = Post.objects(Q(user__ne=hide) & Q(user__gender__ne='M'))
但是两个代码都抛出错误 -> mongoengine.errors.InvalidQueryError: Cannot perform join in mongoDB: user__gender
我知道可以用这个实现。
gender = User.objects(gender__ne='M')
posts = Post.objects(Q(user__ne=hide) & Q(user__nin=gender))
但如果用户的行数过多,可能会出现内存问题。
问题
可以一次查询条件吗?
.objects() 是否真的查询数据库?
【问题讨论】:
标签: mongodb mongoengine