我有很多对象我要保存到Mongoose。它们是深层物体。
var obj1 = {
first_name : 'adam',
last_name: 'smith',
car : [{
make: 'honda',
model: 'civic',
colors: [{
name: 'red',
code: 'ff0000'
}]
}]
}
进入匹配的模型:
var Owner = new Schema({
first_name: String,
last_name: String,
cars:[{
make: String,
model: String
colors: [{
name: String,
code: String
}]
}]
});
除非亚当有第二条记录,否则这一切都很好,花花公子:
var obj2 = {
first_name : 'adam',
last_name: 'smith',
car : [{
make: 'ford',
model: 'focus',
colors: [{
name: 'blue',
code: '0000ff'
}]
}]
}
var obj3 = {
first_name : 'adam',
last_name: 'smith',
car : [{
make: 'honda',
model: 'civic',
colors: [{
name: 'blue',
code: '0000ff'
}]
}]
}
当我执行以下操作时,每个人都完全覆盖前一个:
Owner.findOneAndUpdate({first_name:"adam", last_name: "smith"}, obj2, {upsert: true});
如果没有一个新记录,我如何让mongoose创建一个新记录,但如果有,则附加到car
数组?如果汽车已经存在,请附加到颜色数组?
为了让事情变得更有趣,数据的结构在我的情况下并不一致。它适用于给定的集合,但我的每个集合都是动态设置的,因此模型可能有很多层,并且具有任何给定的键。
答案 0 :(得分:1)
此方法允许您将新元素推送到数组字段
db.findOneAndUpdate(
{first_name:"adam", last_name: "smith"},
{ $push: { cars : {
make: 'ford',
model: 'focus'
}
}
},
{ safe: true,
upsert: false,
new : true
}
);
我觉得你在试图猜测任意复杂的插入/更新/删除的语法时感到痛苦...... mongo / mongoose的世界正在尖叫一个工具来读取模式/数据并让你以交互方式描述你的细节以合成代码片段像上面那样