这里有一些关于此的文章,但不完全是我所追求的.
{
"_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'])]
...