MongoEngine中的子查询
这里有一段示例代码:
import mongoengine as mongo
class User(mongo.Document):
name = mongo.StringField()
age = mongo.IntField()
class Post(mongo.Document):
title = mongo.StringField()
author = mongo.ReferenceField(User)
我想获取所有年龄在30岁以下的用户创建的帖子,一种方法是分两步来请求:
users = User.objects(age__lt=30)
posts = Post.objects(author__in=users)
不过这样做也不是很好,因为它会不必要地多次连接数据库。所以我想一次性完成这个查询,我试过:
posts = Post.objects(author__age__lt=30)
但是这样不行,它只是给我返回了一个空列表,没有错误提示。我哪里做错了呢?
2 个回答
1
... 它不必要地调用并连接数据库多次
MongoDB支持一个叫做$in
的功能,这个功能可以让你一次查询多个对象,只需要一次连接。如果你发现有多个连接,可能需要把这个问题反馈给mongoengine的作者。
因为MongoDB不支持连接查询,所以你用的“加载用户,加载他们的帖子”的方法通常是正确的。
我哪里做错了?
要想了解这么详细的问题,最好的办法是直接联系作者。这个github页面上有他的邮箱和博客。查看一下他的代码库,最后一次更新是在2010年10月,版本号是0.4。三个月没有更新在这个领域算是很久了,而且他甚至还没有1.0版本,所以很可能你需要直接和作者沟通。