gpt4 book ai didi

python - mongoengine - 查询如何按 ListField 大小进行过滤

转载 作者:太空狗 更新时间:2023-10-29 20:42:29 26 4
gpt4 key购买 nike

我有以下模型:

class Like(EmbeddedDocument):
user = ReferenceField(User,dbref=False)
date = DateTimeField(default=datetime.utcnow,required=True)
meta = {'allow_inheritance': False}

class Post(Document):
name = StringField(max_length=120, required=True)
likes = ListField(EmbeddedDocumentField(Like))

我只想过滤超过 20 个赞的帖子(ListField 大小大于 20)。我尝试使用以下方式进行查询:

posts = Post.objects.filter(likes__size_gte=20)
posts = Post.objects.filter(likes_gte=20)
posts = Post.objects.filter(likes__gte=20)
posts = Post.objects.filter(likes__size_gte=20)

它们都不起作用。

但如果我使用完全匹配(ListField 大小恰好是 20 个喜欢),它会起作用:

posts = Post.objects.filter(likes__size=20) 

评论?

最佳答案

远非完美的解决方案,但您可以使用原始的 mongo 查询和 $where运算符,例如:

posts = Post.objects.filter(__raw__={'$where': 'this.likes.length > 20'})

另一个选项应该工作得更快,但在我看来不太清楚,是检查第 21 个元素是否存在:

posts = Post.objects.filter(likes__21__exists=True)

第二个选项仅在您使用 MongoDB 2.2+ 时有效

来源:取自这些 answers并应用于 MongoEngine。

关于python - mongoengine - 查询如何按 ListField 大小进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15013438/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com