繁体   English   中英

Mongodb更新推送对象数组

[英]Mongodb update push Array of Objects

我无法解决这个问题(并希望逐个避免循环更新),请在这里解答我。

我有一个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}});

关于将构造的Object直接插入到字段中,没有任何工作。 当我一次插入一个时,它会更新。

如何编写查询以将对象数组更新/追加到具有自己的Schema维护的Array Type字段中。

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

最初,我保存了文档,并按照我的要求帖子对信息进行了一些处理,我希望将数组元素插入到我正在运行的数组键字段中,以便插入任何内容。 我缺少的是$ 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' }
                ]
        }
      }
    });

谢谢大家!! 希望这可以帮助将来可能面临这个问题的人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM