У меня есть схема, которая выглядит следующим образом (минимизированная / адаптированная для вопроса):
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?