簡體   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