簡體   English   中英

如何使用nodejs在MongoDB中增加數組object中的值?

[英]How to increment a value inside an array object in MongoDB using nodejs?

Here's my MongoDB post model that I am using with node.js.I want to update the number of likes under each object in comments array ie number of likes on each comment.How can I increment the number of likes value.

_postid:6045b7a3b0b0423790d6484b
photo:Object
likes:Array
text:"hey there"
comments:Array
 0:Object
 1:Object
 2:Object
   _id :6045c9251f99b81ee4dbc0f6
    text:"tetstst"
    postedBy:6045c36dd8df2f2f00b115d5
    likes:0
    created:2021-03-08T06:50:13.851+00:00
created:2021-03-08T05:35:31.524+00:00
postedBy:6045116e37280f0970cf63a5

這是我嘗試使用 FindoneandUpdate 做的事情:

Post.findOneAndUpdate(
    model,
    { $inc: { "comments.likes": 1 } },
    { new: true }
  ).exec((err, result) => {
    if (err) {
      return res.status(400).json({
        error: err,
      });
    }
    res.json(result);
  });
};

這是我正在使用的帖子架構:

text: {
    type: String,
    required: "Name is required",
  },

  photo: {
    data: Buffer,
    contentType: String,
  },
  likes: [{ type: mongoose.Schema.ObjectId, ref: "User" }],
  comments: [
    {
      text: String,
      created: { type: Date, default: Date.now },
      postedBy: { type: mongoose.Schema.ObjectId, ref: "User" },
      likes: Number,
    },
  ],

如果您想將每條評論的點贊數增加 1,(我在這里假設model是您的查詢 object。)

Post.findOneAndUpdate(
    model,
    { $inc: { "comments.$[].likes" : 1 } },
    { new: true }
  ).exec((err, result) => {
    if (err) {
      return res.status(400).json({
        error: err,
      });
    }
    res.json(result);
  });
};

如果您只想增加帖子中的第一條評論,

Post.findOneAndUpdate(
    model,
    { $inc: { "comments.0.likes" : 1 } },
    { new: true }
  ).exec((err, result) => {
    if (err) {
      return res.status(400).json({
        error: err,
      });
    }
    res.json(result);
  });
};

如果您想增加6045c36dd8df2f2f00b115d5發表的評論的點贊數

Post.findOneAndUpdate(
    { ...model, { "comments.postedBy": 6045c36dd8df2f2f00b115d5 }},
    { $inc: { "comments.$.likes" : 1 } },
    { new: true }
  ).exec((err, result) => {
    if (err) {
      return res.status(400).json({
        error: err,
      });
    }
    res.json(result);
  });
};

另請參考: https://docs.mongodb.com/manual/reference/operator/update-array/

 await Post.findByIdAndUpdate(post.postId, {
    $inc: { like: 1 },
  });

如果您喜歡被宣布的號碼,此代碼必須有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM