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