更新依赖于新近更新的文档密钥的值

时间:2019-03-26 21:25:56

标签: mongodb

我的目标是在CommentFeed上添加评论,同时我想将该评论推送到topComments字段中,并更新'numOfComments'。我想将topComments限制为仅3条评论(我还要如何设置?)。以及如何获取numOfComments的先前值并将其添加一个?

 CommentFeed.findOneAndUpdate(
            { _id: commentId },
            {
                $push: {
                    comments: {
                        text: req.body.text
                    },
                 $push: topComments:{text: req.body.text}, <--- Limit this somehow to only allow an array length of 3?
                 $set: numOfComments: ? ,  <---What kind of logic is used here?
                }
            },
            { new: true }
        )

CommentFeed架构

    const CommentFeedSchema = new Schema({
              topComments:[{text:{type:String}}],
              numOfComments:{type:Number},
              comments: [
                   text: { type: String, required: true }
                    ]});

1 个答案:

答案 0 :(得分:0)

对于第一个问题(限制topComments数组大小),可以使用$slice运算符。 other questions中已经回答了这个问题。 但是您可能会考虑使用projection参数中的topComments运算符从comments计算$slice

CommentFeed.find( {}, { comments: { $slice: -3 } } )

对于第二个问题(使用该文档中的现有字段更新文档),您不能通过简单的findOneAndUpdate调用来完成。 other questions中也对此进行了讨论。 但是您可能会考虑计算numOfComments,而不是每次都进行更新。您可以使用聚合框架的$size运算符来做到这一点:

CommentFeed.aggregate({$project: { numOfComments: { $size:"$comments" }}})