私が達成しようとしているのは、メイン ドキュメント内にオブジェクトの配列 (サブドキュメントの方法: スキーマで定義) を配置することです。このサブドキュメントをドキュメント自体として動作させたいと考えています。
これは、オブジェクトをサブドキュメント配列にプッシュするときに、エラーがスローされることを望みます:
- 挿入されるオブジェクトのフィールドのいずれか
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
},
...
});
この場合、私がしようとしているとき:
- 既存の に新しいオブジェクトを追加する
name
、または - サブドキュメントにゴミをプッシュする
それが起こっています:
- 重複したフィールド値についてエラーがスローされていません
- ゴミ箱オブジェクト (つまり
{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
}
);
};