Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mongodb-按嵌入文档id聚合覆盖外部文档\u id_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js Mongodb-按嵌入文档id聚合覆盖外部文档\u id

Node.js Mongodb-按嵌入文档id聚合覆盖外部文档\u id,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我有这种“评论”模式: { _id: <comment-id>, user: { id: { type: Schema.ObjectId, ref: 'User', required: true }, name: String }, sharedToUsers: [{ type: Schema.ObjectId, ref: 'User' }], repliedToUsers: [{ type: Schema.Objec

我有这种“评论”模式:

{ _id: <comment-id>,
  user: {
    id: { type: Schema.ObjectId, ref: 'User', required: true },
    name: String
  },
  sharedToUsers:          [{ type: Schema.ObjectId, ref: 'User' }],
  repliedToUsers:         [{ type: Schema.ObjectId, ref: 'User' }],
}
它实际上正在工作,但严重的问题是结果注释id字段被嵌套用户id覆盖

如何保持聚合工作,但不覆盖原始注释id字段

谢谢

好的,我有一个解决方案

我只想按_id分组,但返回结果文档及其_id字段(在使用$group操作符时会被覆盖)

我所做的就像wdberkley所说的,我添加了comment_id:{“$first”:“$_id”}但是我不想返回comment_id字段(因为它不适合我的模型),所以我创建了一个$project,将comment_id放入常规的_id字段中

基本上是这样的:

Comment.aggregate(
        {
            $match: {
                "sharedToUsers": [], "repliedToUsers": []
            }
        },
        {
            $group: {
                comment_id: { $last: "$_id" },
                _id: "$user.id",
                content: { $last: "$content" },
                urlId: { $last: "$urlId" },
                user: { $last: "$user" }
            }
        },
        {
            $project: {
                _id: "$comment_id",
                content: "$content",
                urlId: "$urlId",
                user: "$user"
            }
        },
        { $skip: parsedFromIndex },
        { $limit: (parsedNumOfComments - parsedFromIndex) },
        function (err, result) {
            console.log(result);
            if (!err) {
                Comment.populate(result, { path: "urlId"}, function(err, comments) {
                   if (!err) {
                       res.send(comments);
                   } else {
                       res.status(500).send({err: err});
                   }
                });
            } else {
                res.status(500).send({err: err});
            }
        });

谢谢你

将注释
\u id
推送到组结果中,就像对待
用户那样,例如
注释id:{“$first”:“$\u id”}
Comment.aggregate(
        {
            $match: {
                "sharedToUsers": [], "repliedToUsers": []
            }
        },
        {
            $group: {
                comment_id: { $last: "$_id" },
                _id: "$user.id",
                content: { $last: "$content" },
                urlId: { $last: "$urlId" },
                user: { $last: "$user" }
            }
        },
        {
            $project: {
                _id: "$comment_id",
                content: "$content",
                urlId: "$urlId",
                user: "$user"
            }
        },
        { $skip: parsedFromIndex },
        { $limit: (parsedNumOfComments - parsedFromIndex) },
        function (err, result) {
            console.log(result);
            if (!err) {
                Comment.populate(result, { path: "urlId"}, function(err, comments) {
                   if (!err) {
                       res.send(comments);
                   } else {
                       res.status(500).send({err: err});
                   }
                });
            } else {
                res.status(500).send({err: err});
            }
        });