猫鼬附加在子文档中或子文档本身数组中

时间:2019-03-18 15:55:52

标签: node.js mongodb mongoose

这是我的猫鼬数据库的样子

_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做到这一点,但是它并没有给我我想要的东西。

我怎么得到这样的东西?

1 个答案:

答案 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()

    }
});