Как я могу скопировать весь объект JavaScript для обновления документа MongoDB / Mon goose, содержащего вложенные массивы и вложенные документы? - PullRequest
1 голос
/ 07 мая 2020

У меня есть схема, которая выглядит следующим образом (минимизированная / адаптированная для вопроса):

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 из тела запроса express put, который точно отражает схему mon goose:

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

Мне необходимо обновить документ, и отправьте обратно обновленную версию.

Я пробовал сделать это (учитывая, что я знаю идентификатор родительского документа):

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 документов, но объекты-внучки в массиве subdo c не копируются, и я получаю результат, в котором отсутствуют дочерние объекты каждого поддокумента child:

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

Итак, как можно Я в основном глубоко копирую весь объект javascript, чтобы обновить документ mon goose?

1 Ответ

1 голос
/ 07 мая 2020

Получается, что у меня была орфографическая ошибка в модели схемы, поэтому она не обновлялась правильно.

Сейчас работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...