好吧,我有这个结构的文件:
{
"x" : "X1",
"y" : 10
},
{
"x" : "X2",
"y" : 22
},
{
"x" : "...",
"y" : 42
}
那么,我如何将所有结果转换为:
{
"X1" : 10,
"X2" : 22,
"X3" : 42
}
我尝试使用$arrayToObject
和$map
,但这不起作用
谢谢!
这个系列有大约5000万个文档。
答案 0 :(得分:1)
假设您的收藏量足够小,以便后续操作的输出不会超过16MB BSON limit,您可以使用以下聚合:
db.col.aggregate([
{
$group: {
_id: null,
docs: {
$push: {
k: "$x",
v: "$y"
}
}
}
},
{
$replaceRoot: {
newRoot: {
$arrayToObject: "$docs"
}
}
}
])
$arrayToObject期望对象具有两个属性k
和v
。要将该对象提升为根级别,您可以使用$replaceRoot运算符。