我有一个收集任务,其中包含一个名为demo(对象数组)的字段。我想将一个对象(基于id的搜索)从演示(从一个Task文档)移动到另一个Task文档的demo字段(根据“ number”字段搜索另一个文档)。
结构- 任务收集-
[
{
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 });
我的解决方案工作正常。但是我正在使用两个查询。还有其他选择吗?