gpt4 book ai didi

mongodb - 如何将 $arrayToObject 应用于 mongodb 聚合中 $push 输出的数组

转载 作者:行者123 更新时间:2023-12-03 15:59:16 31 4
gpt4 key购买 nike

下面的代码(两行被注释掉)

    myComments.aggregate(
{ $sort: { createdAt: -1 } },
{ $match: query },
{ $group: {
_id: {
activity: "$activity",
writer: "$writer"
},
summary: {
// $arrayToObject: {
$push: {
"k": "$userID",
"v": "$commentText",
}
// }
},
} },
{ $project: { _id: 0 } },
( err, data ) => {
console.log( JSON.stringify( data || [] ) );
}
)

按预期生成“摘要”数组:

    [ {"summary":[ {"k":183044,"v":"adf"}, {"k":184817,"v":"be"}, {"k":187252,"v":"c"} ]},
{"summary":[ {"k":183044,"v":"146"}, {"k":184817,"v":"25"}, {"k":187252,"v":"3"} ]} ]

但是,当我删除注释并允许 $arrayToObject 对这些数组进行操作时,输出 data 未定义。

我是否错误地使用了其中一个或两个命令?这样嵌套它们是不正确的吗?

最佳答案

$group中,当每个文档被迭代时,相应的以下对象将被插入summary字段,因此在小组阶段结束时summary > 将是一个对象数组。

{
"k": "$userID",
"v": "$commentText"
}

此外,您无法将 $arrayToObject 应用于摘要,因为您的键(k)不是字符串。因此,如果 $userID 不是字符串,您需要在小组赛阶段将其转换为字符串。请尝试如下:

   myComments.aggregate(
{ $sort: { createdAt: -1 } },
{ $match: query },
{
$group: {
_id: {
activity: "$activity",
writer: "$writer"
},
summary: {
$push: {
"k": { $toString: "$userID" },
"v": "$commentText",
}
},
}
},
{
$project: {
_id: 0,
summary: {
$arrayToObject: "$summary"
}
}
},
(err, data) => {
console.log(JSON.stringify(data || []));
}
)

关于mongodb - 如何将 $arrayToObject 应用于 mongodb 聚合中 $push 输出的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60322299/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com