编辑:这实际上是有效的
正如猫鼬 - 子文档:“添加子文档”文档所说,我们可以使用该push
方法添加子文档(即parent.children.push({ name: 'Liesl' });
)
但我想更进一步,想使用$push
操作符来插入子文档。
我有两个架构ThingSchema
:
var ThingSchema = mongoose.Schema({
name: {
type: String,
required: true
},
description: {
type: String
}
});
和BoxSchema
,具有子文档数组 ( things
)的主文档ThingSchema
:
var BoxSchema = new mongoose.Schema({
name: {
type: String,
required: true
},
description: {
type: String
},
things: {
type: [ThingSchema]
}
});
var BoxModel = mongoose.model('Box', BoxSchema);
我需要每个子文档都有名称 - 也就是说,不可能将新文档插入到该数组中,该数组的值已经存在于子文档中。things
unique
name
我正在尝试做类似的事情:
var thingObj = ... // the 'thing' object to be inserted
BoxModel.update({
_id: some_box_id, // a valid 'box' ObjectId
"things.name": { "$ne": thingObj.name }
},
{
$push: { things: thingObj}
},
function(err) {
if (err) // handle err
...
});
但没有得到任何想要的结果。
在查询中使用运算符将ThingSchema
子文档添加到BoxSchema
'thing
数组中的正确方法是什么(如果有另一个名称相同的子文档,则不得添加子文档),而不是Mongoose Docs方式?$push
编辑:这实际上是问题
我犯了一个错误,上面的代码按预期工作,但现在我遇到的问题是当thingObj
不匹配时ThingSchema
,将一个空对象插入到things
数组中:
// now thingObj is trash
var thingObj = { some: "trash", more: "trash" };
当执行给定上述垃圾对象的查询时,以下空对象被插入到 subdocs 数组中:
{ _id: ObjectId("an_obj_id") }
我想要这种情况,当 与thingObj
不匹配时ThingSchema
,无需添加任何内容。