У меня есть Задача коллекции, в которой есть поле с именем demo (массив объектов). Я хочу переместить объект (поиск на основе идентификатора) из демонстрации (из одного документа задачи) в другое демонстрационное поле документа задачи (поиск другого документа на основе поля «число»).
Структура -
Сборник заданий -
[
{
number: 'abc',
demo: [
{
_id: ObjectId('5b33792cfee1940010cce1f4'),
number:'abc'
}, // **move this object**
....
]
},
{
number: 'def',
demo: [
{
_id: ObjectId('5b33792cfee1940010cce5'),
number:'def'
},
....// **move that object here and change it's number to def**
]
},
....
]
Я уже пробовал это -
Я извлекаю объект демонстрационного массива из одного документа и помещаю его в демонстрационный пример другого документа.
let task = await Task.findOneAndUpdate(
{ "demo": { $elemMatch: { _id: id } } },
{ $pull: { "demo": { _id: id } } },
).lean();
// find on basis of id
let demo = task.demo.filter(t => t._id == id)[0];
demo.number = to;
let res = await Task.findOneAndUpdate({ number: to }, { "$push": { "demo": demo} }, { new: true });
Мое решение работает просто отлично. Но я использую два запроса. Есть ли другая альтернатива?