如何在 Mongoengine 中对 EmbeddedDocumentListField 对象进行分页?
How can I paginate EmbeddedDocumentListField objects in Mongoengine?
这是我的类。查询 User
中嵌入的 Review
对象并以某种方式对其进行分页的好方法是什么?
class Review(EmbeddedDocument):
review_body = StringField(required=True)
review_stars = FloatField(required=True, default=0)
reviewer = LazyReferenceField('User')
review_date = DateTimeField()
class User(Document):
userreviews = EmbeddedDocumentListField(Review)
我确定我可以使用 .count()
轻松获得总数,但我不确定如何跳过并仅查询一部分对象。
答案似乎在于我查询数据库的方式。我做错了我想要完成的事情。
什么不起作用:
userprofile: user.User = user.User.objects(
username=request.form["username"]).get()
all_reviews = userprofile.userreviews # work with objects here
什么应该有效:
使用 .filter(
) 和 .slice()
我可以获得嵌入的 Review
对象,如下所示:
reviews = user.User.objects.filter(username=request.form["username"]).fields(
slice__userreviews=[0, 2])
for r in reviews:
print(r.userreviews)
这将 return 2 个从索引 0 开始的评论对象。然后我只需要使用 .count()
来获取总数,我应该有分页所需的 3 个元素。
这是我的类。查询 User
中嵌入的 Review
对象并以某种方式对其进行分页的好方法是什么?
class Review(EmbeddedDocument):
review_body = StringField(required=True)
review_stars = FloatField(required=True, default=0)
reviewer = LazyReferenceField('User')
review_date = DateTimeField()
class User(Document):
userreviews = EmbeddedDocumentListField(Review)
我确定我可以使用 .count()
轻松获得总数,但我不确定如何跳过并仅查询一部分对象。
答案似乎在于我查询数据库的方式。我做错了我想要完成的事情。
什么不起作用:
userprofile: user.User = user.User.objects(
username=request.form["username"]).get()
all_reviews = userprofile.userreviews # work with objects here
什么应该有效:
使用 .filter(
) 和 .slice()
我可以获得嵌入的 Review
对象,如下所示:
reviews = user.User.objects.filter(username=request.form["username"]).fields(
slice__userreviews=[0, 2])
for r in reviews:
print(r.userreviews)
这将 return 2 个从索引 0 开始的评论对象。然后我只需要使用 .count()
来获取总数,我应该有分页所需的 3 个元素。