在MongoDB中更新对象数组内部对象的查询是什么?

时间:2019-04-07 23:47:59

标签: arrays node.js mongodb mongoose

首先这里是我创建文章的数据库结构。 https://imgur.com/cnrbW2l

在这里,我想通过添加名为thumbup的新字段来用_id 5caa581bdc6f245dd4cd8ed9更新sub_comment。我需要如何执行更新查询?

使用mongoose.js,这是我的模型:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const ArticleSchema = new Schema({
  category: String,
  title: String,
  content: String,
  author: String,
  picture: String,
  is_helpful: { type: Number, min: 0, max: 100000 },
  total_helpful: { type: Number, min: 0, max: 100000 },
  comment: [
    {
      full_name: String,
      email: String,
      message: String,
      picture: String,
      thumbup: { type: Number, min: 0, max: 2000 },
      thumbdown: { type: Number, min: 0, max: 2000 },
      sub_comment: [
        {
          sc_full_name: String,
          sc_email: String,
          sc_message: String,
          sc_picture: String,
          sc_thumbup: { type: Number, min: 0, max: 2000 },
          sc_thumbdown: { type: Number, min: 0, max: 2000 }
        }
      ]
    }
  ],
  tags: [String],
  time: Date
});

module.exports = Article = mongoose.model('articles', ArticleSchema);

这是更新注释的工作代码示例,例如添加新的字段thumbup和分配值。这段代码可以正常工作。

  Article.update(
    { 'comment._id': req.body.comment_id },
    { $inc: { 'comment.$.thumbup': 1 } }
  )
    .then(success => {
      message = {
        meta: { status_code: 200, message: 'success' }
        // data: success
      };
      res.status(200).json(message);
    })
    .catch(err => {
      console.log(err);
    });

这是我的代码,用于在sub_comment上添加字段thumbup / increase thumbup值,但是它不起作用。

Article.update(
    {
      'sub_comment._id': req.body.sub_comment_id
    },
    {
      $inc: { 'sub_comment.$.thumbup': 1 }
    }
  )
    .then(success => {
      message = {
        meta: { status_code: 200, message: 'success' },
        data: success
      };
      res.status(200).json(message);
    })
    .catch(err => {
      console.log(err);
    });

我希望在sub_comment上添加新的字段thumbup。我正在使用运算符$ inc自动增加价值。上面的代码我什么都没得到,这是上面的代码执行的结果:

    "ok": 0,
    "n": 0,
    "nModified": 0

0 个答案:

没有答案