1

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

也就是说,当将一个对象推入子文档数组时,我希望它抛出一个错误:

  • 如果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. 任何垃圾推入我的子文档

事情是这样的:

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

我不知道为什么。

这是我用来将新模板对象插入到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
      }
    );
};
4

0 回答 0