Mongoose $ push - 没有错误:插入具有现有唯一字段的对象+插入垃圾

时间:2015-10-26 21:55:46

标签: node.js mongodb mongoose mongodb-query subdocument

我想要完成的是在主文档中有一个对象数组(子文档方式:在模式中定义),我希望这个子文档表现为文档本身。

这是,当将Object推入Subdocument数组时,我希望它引发错误:

  • 如果已插入对象的任何unique字段已被采用
  • 如果插入的对象与TemplateSchema
  • 不匹配

这将是我的主要文件:

var ApplicationSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true,
    unique: true
  },
  description: {
    type: String
  },
  ...
  templates: {
    type: [TemplateSchema]
  }
});

以下是子文档,templates中的ApplicationSchema字段:

var TemplateSchema = mongoose.Schema({
  name: {
    type: String,
    required: true,
    unique: true,
    sparse: true
  },
  description: {
    type: String
  },
  ...
});

在这种情况下,当我尝试:

  1. 使用已存在的name
  2. 添加新对象
  3. 任何垃圾推送到我的子文档
  4. 发生了这样的事情:

    1. 没有关于重复字段值的错误
    2. 正在插入垃圾对象(即{some: "trash"}) - 不是 真的是对象本身,但它正在推动空template templates数组
    3. 中的对象

      我无法弄明白为什么。

      这是我用来将新模板对象插入到主文档中的templates数组中的查询,我猜这里是不能按预期工作的地方:

      exports.create = function(id, objTemplate, callback) {
        ApplicationModel.findByIdAndUpdate(
            { _id: id },
            {
              $push: {
                "templates": objTemplate
              }
            },
            {
              safe: true,
              upsert: true,
              new : true
            },
            function(err, application) {
              // handle stuff
            }
          );
      };
      

0 个答案:

没有答案