这是我的猫鼬数据库的样子
_id: ObjectId("5c7d6b0b54795c02a6a5cb16")
people:[
{
_id: ObjectId('7c7d6b0b54795c02a6aa878')
name: John
bizs:[
{name:"Shop A"},
{name:"Shop B"}
]
},
{
_id: ObjectId('7c7d6b0b54795c02638b9cd')
name: Mary
bizs:[
{name:"Shop X"}
]
}
]
如果我添加一个与他的业务有关的人已经在数据库中(例如John),则我需要该业务将自己附加到bizs数组中。例如,商店A,商店B,商店C。
但是,如果我添加另一个人(不在数据库中的人)(例如我添加玛丽的方式),则需要它来在人数组中创建一个全新的对象
我已经尝试通过upsert做到这一点,但是它并没有给我我想要的东西。
我怎么得到这样的东西?
答案 0 :(得分:0)
您首先需要确定是否存在一个名为“约翰”的人(按照您的示例),这可以使用简单的查找查询来完成。如果该查询的结果为null或未定义,则可以插入一个新对象(将新记录添加到人员数组中),否则您可以将其附加到找到的文档中并保存。
const name = req.body.name;
Schema.findOne({"people.name" : name} , (err , user)=>{
if(err){
//handle
}
if(!user){
//create a new record and push it to people array and save it.
}
else{
//create a record(with your object) and push it to people array and save
user.people.push();
user.save()
}
});