【问题标题】:Mongoose Append in subdocument or inside the array in the subdocument itself猫鼬附加在子文档中或子文档本身的数组中
【发布时间】:2019-08-09 01:17:28
【问题描述】:

这就是我的 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 店。

但如果我添加另一个人不在数据库中(就像我如何添加 Mary),我需要它在人员数组中创建一个全新的对象.

我曾尝试使用 upsert 执行此操作,但它并没有给我想要的。

我怎样才能得到这样的东西?

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    您首先需要查找是否存在一个名为“John”的人(根据您的示例),这可以使用简单的查找查询来完成。如果该查询的结果为 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()
    
        }
    });
    

    【讨论】:

    • 在 mongodb/mongoose 中是否有任何“开箱即用”的方法来执行此操作,而不是按照您的建议首先查找和插入(如果没有找到)?
    • 这个没有“开箱即用的解决方案”。但我希望这会对你有所帮助:stackoverflow.com/questions/40102372/…
    猜你喜欢
    • 2019-10-06
    • 1970-01-01
    • 2020-11-18
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 2019-06-06
    相关资源
    最近更新 更多