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

标签 mongodb aggregation-framework

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

    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/

相关文章:

python - 如何确保 MongoDB 免受其他用户的侵害?

session ID 的 MongoDB ObjectID 安全

mongodb - Mongoose 仅​​从数组中获取特定对象,如果没有则为空数组

mongodb - 如何使用组和累加器阶段改进 MongoDB 聚合?

mongodb 丢失的收藏品目录

javascript - 在 Node.js 的 get 请求中链接集合方法/promise

mongodb - mongodb聚合中的项目嵌套嵌入文档

MongoDB:$project 和 $filter,包括所有其他属性

mongodb - 使用 MongoDB 投影数组

python - 在 mongodb 中使用 python 进行文本搜索