假设有以下两个模型,并且模型Parent应该能够将多个子对象存储为一个数组:
const schemaChild = new Schema({
_id: { type: Number, unique: true },
name: { type: String }
});
mongoose.model('Child', schemaChild);
const schemaParent = new Schema({
_id: { type: Number, unique: true }
children: [{
_id: { type: Number, unique: true },
child { type: Number, ref: 'Child' }
}]
});
mongoose.model('Parent', schemaParent);
数据通过以下方式添加:
const cb = (err) => { if(err) next(err); };
const _childA = await Child.findByIdAndUpdate(1, { _id: 1, name: 'Child A' }, { new: true, upsert: true }, cb);
const _childB = await Child.findByIdAndUpdate(2, { _id: 2, name: 'Child B' }, { new: true, upsert: true }, cb);
await Parent.findByOneAndUpdate(1, { $addToSet: { children: { _id: 1, child: _childA._id } } }, { upsert:true }, cb);
await Parent.findByOneAndUpdate(1, { $addToSet: { children: { _id: 1, child: _childB._id } } }, { upsert:true }, cb);
以下内容将存储在父集合中:
{
"_id": 1,
"__v": 0,
"children": [
{
"_id": 1,
"child": 1
},
{
"_id": 1, // $addToSet adds another child with the same _id, instead of replacing a child with the same _id
"child": 2
}
]
}
问题
如何修改代码,以便集合Parent中所有操作的结果如下:
{
"_id": 1,
"__v": 0,
"children": [
{
"_id": 1,
"child": 2
}
]
}
具有相同_id的孩子应该被替换而不是被添加。
我采用了不同的方法,但没有成功,并且不确定要解决该问题的最佳实践。感谢您的帮助。