【问题标题】:Mongodb update push Array of ObjectsMongodb更新推送对象数组
【发布时间】:2019-04-27 23:38:45
【问题描述】:

我无法解决这个问题(并希望一一避免循环更新),请帮帮我。

我有一个 fambio 文档(它有自己的 FamilyModel),它是在用户提供以下信息后创建的:

{
  name: 'john',
  lname: 'doe',
}

现在,在上述信息保存后,用户在后端进行一些处理后提供更多关于家庭的信息:

  let familyArr = [
    { _id: 1234, name: 'Jenny', lname: 'doe', relation: 'mother' },
    { _id: 2345, name: 'Jawn', lname: 'doe', relation: 'father' },
    { _id: 3456, name: 'Jane', lname: 'doe', relation: 'sister' },
    { _id: 4567, name: 'Daisy', lname: 'wick', relation: 'pupper' }
  ]

总而言之,FamilyModel 架构如下所示:

const FamilyModel = mongoose.Schema({
  name: {type: String, required: true},
  lname: {type: String, required: true},
  family: [relationshipSchema]
}, {
  timestamp: true
});

const relationshipSchema = mongoose.Schema({
  name: {type: String, required: true},
  lname: {type: String, required: true},
  relation: {type: String, required: true}
}, {
  required: false,
  timestamp: true
});

现在,John 有一个系列对象数组(归档类型 Array)并尝试像这样插入该对象数组:

我尝试了多种选择:

    db.fambio.updateOne({_id: 1111}, { $set: { family: familyArr }})
    db.fambio.findOneAndUpdate({_id: 1111}, { $push: { family: familyArr }});
    db.fambio.update({_id: 1111}, $addToSet: { 'family': familyArr}});

将构造的对象直接插入字段没有任何作用。当我一次插入一个时,它会更新。

我应该如何编写查询来更新/追加一个对象数组到一个数组类型的字段中,并维护自己的架构。

【问题讨论】:

  • 您从第一个查询中得到的响应是什么?您是否尝试过使用.update() 进行的第一个查询可能是?你传递的数组也应该遵循关系模式。
  • @saikatchakrabortty 保存用户信息后,一旦成功保存,我将获得保存的文档作为回报,并带有 _id。保存()/插入操作后,我尝试更新“family”:[] Array Field key with Array of Objects 返回空 {} 或更新:0
  • 使用{multi: true} 更新多个文档
  • @mexo 谢谢,能否举个例子,不胜感激
  • db.collection.update(<query>,<update>,{multi:true})

标签: node.js mongodb mongoose


【解决方案1】:

好的,我已经解决了。我是如何解决的:

最初,我保存了文档并根据我的要求帖子对信息进行了一些处理,我想将元素数组插入到一个数组关键字段中,我遇到了没有插入任何内容的问题。我缺少的是 $each,我就是这样做的:

db.getCollection('fambio').update({
      _id: johnsuserid
    }, {
      $push: {
        'family': {
          $each:[
                  { _id: 1234, name: 'Jenny', lname: 'doe', relation: 'mother' },
                  { _id: 2345, name: 'Jawn', lname: 'doe', relation: 'father' },
                  { _id: 3456, name: 'Jane', lname: 'doe', relation: 'sister' },
                  { _id: 4567, name: 'Daisy', lname: 'wick', relation: 'pupper' }
                ]
        }
      }
    });

谢谢大家!!希望这对将来可能面临此问题的人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 1970-01-01
    • 2014-07-29
    相关资源
    最近更新 更多