python-PyMongo-查询嵌入式文档列表

这里有一些关于此的文章,但不完全是我所追求的.

我有一个包含嵌入式文档列表的文档:

{
   "_id": 1234
   "name": "joe"
   "comments": [
       {"type": "text", "content": "my content"},
       {"type": "image", "content": "my_content"}
       {"type": "image", "content": "my_content"}
   ]

}

我想运行一个查询以获取一组文档,然后希望运行辅助查询以从该初始查询集中搜索“评论”列表.

例如p = db.people.find({“ some”:“ condition”}),然后搜索嵌入式文档,例如p.find({“ type”:“ image”}

这显然行不通.只是想知道是否有一种方法可以不必在父文档集合上再次运行2个单独的查询?

解决方法:

如果您只想在集合中找到既满足条件又满足Comments数组中的{“ type”:“ image”}的项目,则可以在单个查询中完成:

p = db.people.find({"some": "condition", "comments.type": "image"})

有关更多信息,请参见dot notation页面.

如果您确实需要全部内容,并且对所说结果中的特定子项目感兴趣,那么我能想到的最佳方法就是将结果放入列表中,并在Python中进行检查.有任何PyMongo大师对此有话要说吗?请注意,如果您的数据集很大,那么这不是一个好主意.

p = list(db.people.find({"some": "condition"})

# A little verbose, but...
image_p = [item for item in p
           if any(comment['type'] == 'image'
                  for comment in item['comments'])]

...
上一篇:Linux运维工程师面试题大全09_文本处理三剑客之SED


下一篇:pymongo的runco​​mmand中使用“ from”作为kwarg键