名为groups
的集合的每个实例都有一个名为actives
的字段,它是“子文档”的列表,即{keys:values}形式的事物。子文档的一个字段(键)是id_
,这是一个字符串。
如果我获取groups
的所有实例中存在的所有子文档的集合,则不会有2个相等id_
,即id_
唯一标识每个子文档。但是,我得到一个新的子文档。我需要运行一个带有子文档的id的程序,该程序将转到一个网站并提取有关子文档的信息。在此信息中,我找到子文档所属的组。但是,如果我已经有一些子文档,我不想运行此程序,在某些groups
实例中,{“1}}与”新“子文档相同。
如何列出所有文档(或id_
的实例)的所有子文档的ID?
编辑:
假设数据库组的文档是:
groups
我想要做的是列出所有doc1: {"neighbourhood": "n1", "actives": [{"id_": "MHTEQ", "info": "a_long_string"}, {"id_": "PNPQA", "info": "a_long_string"}]}
doc2: {"neighbourhood": "n2", "actives": [{"id_": "MERVX", "info": "a_long_string"}, {"id_": "ZDKJW", "info": "a_long_string"}]}
,即
"id_"
答案 0 :(得分:1)
将汇总管道与$unwind
和$project
运算符一起使用。
results = db['collection'].aggregate(
[
{"$project": {"actives": 1, "_id": 0}},
{"$unwind": "$actives"},
{"$project": {"id_str": "$actives.id_", "_id": 0}}
]
)
return list(results)
https://docs.mongodb.com/v3.2/reference/operator/aggregation/unwind/ https://docs.mongodb.com/v3.2/reference/operator/aggregation/project/
示例输出
{
"id_str" : "MHTEQ"
}
{
"id_str" : "PNPQA"
}
{
"id_str" : "MERVX"
}
{
"id_str" : "ZDKJW"
}