PyMongo - 查询嵌入文档列表

Giv*_*ivP 4 python mongodb pymongo

这里有一些关于此的帖子,但不完全是我所追求的。

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

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

}
Run Code Online (Sandbox Code Playgroud)

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

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

这显然是行不通的。只是想知道是否有一种方法可以做到这一点,而不必再次对父文档集合运行 2 个单独的查询?

voi*_*hos 5

如果您只想查找集合中满足给定条件并且在数组中也满足的项目,您可以在单个查询中执行此操作:{"type": "image"}comments

p = db.people.find({"some": "condition", "comments.type": "image"})
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅点符号页面。

如果您确实需要整个内容,并且您对所述结果中的特定子项感兴趣,那么我能想到的最好方法就是将结果放入列表中,然后在 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'])]

...
Run Code Online (Sandbox Code Playgroud)