db.blog.posts.find({"comments.name" : "bob"}, {"comments.$" : 1})
请问使用MongoEngine对上面语句的实现方式
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在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代码中进一步处理结果。