我一直在为这个荒谬的时间而苦苦挣扎。
假设我有一个Cars
的集合,每个文档都有子文档数组Parts
。
{
_id: ObjectId('123'),
model: 'Audi',
color: 'Red',
parts: [
{
_id: ObjectId('abc'),
name: 'Tire',
},
{
_id: ObjectId('def'),
name: 'Engine',
},
],
}
我希望使用以下JSON请求,更新所请求的Part
_id的每个Car
子文档的价格。
{
_id: ObjectId('123'),
parts: [
{
_id: ObjectId('abc'),
price: 23,
},
{
_id: ObjectId('def'),
price: 35,
},
],
}
更新文档后我期待的结果是:
{
_id: ObjectId('123'),
model: 'Audi',
color: 'Red',
parts: [
{
_id: ObjectId('abc'),
name: 'Tire',
price: 23,
},
{
_id: ObjectId('def'),
name: 'Engine',
price: 35,
},
],
}
是否可以使用单个MongoDB查询执行此操作?
目前,我可以使用两个查询完成此操作,首先获取文档,然后第二次更新(使用lodash)。
async (req, res) => {
const body = req.body;
const car = await Car.findById(body._id);
const merged = car.parts.map(part => {
return _.assign(part, _.find(body.parts, { _id: part._id })
});
const result = await Car.findByIdAndUpdate(merged._id, {
$set: merged,
}, {
new: true,
});
res.json(result);
}
执行两个查询有点不理想,但我相信这可能是必要的。我只想使用一个查询来实现解决方案。