Pymongo查询“子文档”

时间:2016-12-07 04:26:04

标签: mongodb pymongo

名为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_"

1 个答案:

答案 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"
}