簡體   English   中英

如何復制整個 JavaScript object 以更新包含嵌套 arrays 和子文檔的 MongoDB/Mongoose 文檔?

[英]How can I copy an entire JavaScript object to update a MongoDB/Mongoose document, that contains nested arrays and subdocuments?

我有一個看起來像這樣的模式(最小化/適應問題):

const grandchild = new mongoose.Schema({
    bar: String
}


const child = new mongoose.Schema({
  foo: Number,
  children: [grandchild]
});

const parent = new mongoose.Schema({
  baz: String,
  children: [child]
}

const Parent = mongoose.model("Parent", parent);

並且我需要更新現有的Parent級(本質上是替換/復制整個對象)給定一個 JavaScript object 從一個快速put請求正文,它准確地反映了 mongoose 模式:

{
  baz: "Baz",
  children: [
    {
      foo: 50,
      children: [
        {
           bar: "abc"
        },        
        {
           bar: "xyz"
        }
      ]
    },
    {
       foo: 20
    },
  ]
}

我需要更新一個文檔,然后發回更新的版本。

我試過這樣做(鑒於我知道父文檔的 ID):

app.put("/update", (req, res) => {
   const updated = Parent.findOneAndUpdate({_id: id}, req.body, {new: true});

   // (I do convert to something sendable via express, but omitted here as irrelevant 
   res.json(updated)
}

這似乎正確地復制了parent文檔和child文檔,但是子文檔數組中的孫對象沒有被復制過來,我得到的結果是缺少每個child子文檔的子 object:

{
  baz: "Baz",
  children: [
    {
      foo: 50,
    },
    {
       foo: 20
    },
  ]
}

那么我怎樣才能基本上深度復制整個javascript object 來更新mongoose文檔呢?

所以事實證明我在模式 model 中有一個拼寫錯誤,所以它沒有正確更新它。

現在可以了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM