我有一个集合在我的MongoDB:
{ userId: 1234, name: 'Mike' }
{ userId: 1235, name: 'John' }
...
我想得到一个形式为
的结果dict[userId] = document
换句话说,我想要的结果是一个字典,其中userId
是键,文档的其余部分是值。
我该怎么做呢?
您可以使用$arrayToObject
来做到这一点,您只需要将其格式化为k
,v
之前的数组。
不清楚是为所有文档使用一个字典,还是为每个文档使用字典格式。我猜你想要第一个选项,但我同时显示了两个:
一本字典对于所有数据*,需要$group
(也格式化数据):
db.collection.aggregate([
{
$group: {
_id: null,
data: {$push: {k: {$toString: "$userId"}, v: "$$ROOT"}}
}
},
{
$project: {data: {$arrayToObject: "$data"}}
},
{
$replaceRoot: {newRoot: "$data"}
}
])
看看它是如何在playground示例中工作的-一个字典
*注意,在这个选项中,所有的数据都被插入到一个文档中,并且文档的大小有限制。
字典格式:如果您希望获得所有文档作为不同的结果,但使用字典格式,只需将聚合的第一步替换为:
{
$project: {
data: [{k: {$toString: "$userId"}, v: "$$ROOT"}],
_id: 0
}
},
看看它是如何在playground示例中工作的- dict per document