pymongo查询到平面列表?

时间:2019-02-11 21:03:34

标签: python mongodb pymongo

我有一个带有“传感器”的集合,每个传感器看起来像:

{
    "_id" : ObjectId("5c3bfc66b5594738c8016d12"),
    "parentDeviceID" : ObjectId("5c3b9aa0b559471f1088c5e1"),
    "sn" : 2,
}

我想获取属于特定parentDeviceID的序列号(“ sn”)列表:

    sensorList = list(self._dbC.sensorsCol.find({'parentDeviceID':parentDeviceID}, {'sn': 1, '_id':0}))
    print(type(sensorList))
    print(sensorList)

但是我得到了字典列表:

[{'sn': 1}, {'sn': 2}, {'sn': 3}]

我想得到:

[1,2,3]

1 个答案:

答案 0 :(得分:1)

这是通过服务器端聚合来实现的方法:

db.sensors.aggregate({"$group":{"_id":null,"sn":{"$push":"$sn"}}})

这将为您提供一个文档,如下所示:

{ "_id" : null, "sn" : [1, 2, 3] }

从中提取数组应该很简单。

$group上方的_id:null表示它为集合中的所有文档构造了一个单独的组。 $push聚合器构造该组中所有sn值的数组。请注意,文档大小限制为16 MB,因此,如果您的传感器ID列表可能变得更大,则可能需要其他客户端解决方案。