您可以使用$arrayToObject
为此,您只需将其格式化为数组k
, v
before.
目前尚不清楚您是否想要一个字典用于所有文档,或者每个文档都采用字典格式。我猜你想要第一个选项,但我同时展示了两个选项:
一本字典对于所有数据*,需要$group
(这也格式化数据):
db.collection.aggregate([
{
$group: {
_id: null,
data: {$push: {k: {$toString: "$userId"}, v: "$$ROOT"}}
}
},
{
$project: {data: {$arrayToObject: "$data"}}
},
{
$replaceRoot: {newRoot: "$data"}
}
])
看看它是如何工作的游乐场示例 - 一个字典 https://mongoplayground.net/p/qMYMvOCO6xS
*请注意,在此选项中,所有数据都插入到一个文档中,并且文档作为限制大小。
词典格式:如果您想以不同的结果获取所有文档,但采用字典格式,只需将聚合的第一步替换为:
{
$project: {
data: [{k: {$toString: "$userId"}, v: "$$ROOT"}],
_id: 0
}
},
看看它是如何工作的游乐场示例 - 每个文档的字典 https://mongoplayground.net/p/rLaq7WqgPsC