Arrays 推送或添加到mongoose中的集合
我有很多东西要留给猫鼬。它们是很深的物体Arrays 推送或添加到mongoose中的集合,arrays,insert,mongoose,Arrays,Insert,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:
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
数组?如果汽车已经存在,是否附加到颜色数组
为了让事情变得有趣一点,在我的例子中,数据的结构并不一致。它适用于给定的集合,但我的每个集合都是动态设置的,因此模型可能有很多层,并且具有任何给定的键 这种方法允许您将新元素推送到数组字段上
db.findOneAndUpdate(
{first_name:"adam", last_name: "smith"},
{ $push: { cars : {
make: 'ford',
model: 'focus'
}
}
},
{ safe: true,
upsert: false,
new : true
}
);
我感觉到你在尝试猜测任意复杂的插入/更新/删除的语法时的痛苦。。。mongo/mongoose的世界迫切需要一种工具来读取模式/数据,并让您以交互方式描述您的细节,以合成上述代码片段尝试使用upsert true和false,但仍然没有保存记录。我将编辑一点问题。即使在显式创建第一级记录后调用此函数,我也不会得到任何更深层次的存储。我可能不得不回到这个问题上。