开发者社区 问答 正文

在MongoEngine库中,如何返回匹配的数组元素?

db.blog.posts.find({"comments.name" : "bob"}, {"comments.$" : 1})
请问使用MongoEngine对上面语句的实现方式

展开
收起
落地花开啦 2016-02-07 11:52:31 2794 分享 版权
阿里云 AI 助理回答

在MongoEngine中,要实现与您给出的MongoDB查询语句相同的功能,可以使用以下方式:

from mongoengine import *

# 假设已经定义了BlogPost文档类
class Comment(EmbeddedDocument):
    name = StringField()
    # 其他评论字段...

class BlogPost(Document):
    title = StringField()
    content = StringField()
    comments = ListField(EmbeddedDocumentField(Comment))

# 查询操作
posts_with_bob_comment = BlogPost.objects.filter(comments__name='bob').only('comments__name')

这里的代码首先定义了两个文档类:Comment作为嵌入文档用于表示评论,包含一个name字段;BlogPost文档类则包含博客帖子的相关信息以及一个评论列表。然后通过BlogPost.objects.filter()方法过滤出所有包含名为"bob"的评论的帖子,并且使用.only('comments__name')来限制返回结果中只包含匹配的评论名称。请注意,MongoEngine中的投影(projection)语法与原生MongoDB的 projection 有所不同,它更倾向于使用字段名而非操作符来指定需要返回的字段。

需要注意的是,MongoEngine并没有直接提供与MongoDB的$投影运算符完全等价的功能来精确返回第一个匹配的数组元素。上述示例将返回所有匹配的评论,每个帖子下的评论只要是名字为"bob"的都会被包含在结果中。如果确实需要精确模拟原生MongoDB查询中只返回每个文档中第一个匹配数组元素的行为,可能需要在查询后的Python代码中进一步处理结果。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: