【问题标题】:Add array to subdocument Mongoose将数组添加到子文档 Mongoose
【发布时间】:2019-01-21 14:06:43
【问题描述】:

我正在尝试使用 Express 将数组添加到 Mongoose 中的现有子文档,但我似乎无法弄清楚

这是我的猫鼬模型:

var subitems = new mongoose.Schema({
  _id: ObjectId,
  title: String,
  messages: Array
});

var menuItems = new mongoose.Schema({
  title : String,
  subitem: [subitems]
}, {collection: 'menu_items'});

module.exports = mongoose.model("menu_items", menuItems);

我正在使用子文档中的 ID 来更新“子项”中的特定项 这是快速更新:

postController.postArticles = function(req, res,item) {
  var id = req.body.id;
  var saveData = {
    title: req.body.title,
    text: req.body.text
  };
  item.update({_id: id}, {$push:{messages: saveData}},(err, result) => {
  });
};

它没有向数据库添加任何东西,有人知道吗?

【问题讨论】:

    标签: javascript express mongoose


    【解决方案1】:

    使用猫鼬,您必须更新整个对象。因此,首先您使用 find 或 findOne 获取项目,然后您必须使用 push 将元素添加到数组中,最后调用 mongoose 对象的 .save() 方法。 像这样的:

    postController.postArticles = function(req, res,item) {
      var id = req.body.id;
      item.findOne({_id: id}, function(error, myItem) {
        var saveData = {
          title: req.body.title,
          text: req.body.text
        };
        myItem.messages.push(saveData);
        myItem.save();
      });
    };
    

    【讨论】:

    • 我忘记了括号。事实上,由于你在这里没有使用 Promise,它需要一个回调。立即尝试
    • 也不工作。一直告诉我“无法读取 null 的属性‘push’”
    • 那是因为它没有找到对象。确保你收到的身份证很好。检查错误是否有任何价值并打印出来。并且必须对消息字段进行推送,但这不是错误的原因。
    • id收到很好,不知道是什么问题
    • 确保 id 存在于数据库中的该集合中,并确保您正确传递项目集合...打印错误和 myItem 以了解发生了什么。提供一些线索
    猜你喜欢
    • 2019-01-04
    • 1970-01-01
    • 2014-07-29
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 2021-06-17
    相关资源
    最近更新 更多