我一直在为这个荒谬的时间而苦苦挣扎 .
假设我有一个 Cars
的集合,每个文档都有子文档数组 Parts
.
{
_id: ObjectId('123'),
model: 'Audi',
color: 'Red',
parts: [
{
_id: ObjectId('abc'),
name: 'Tire',
},
{
_id: ObjectId('def'),
name: 'Engine',
},
],
}
我希望使用以下JSON请求,更新所请求的 Car
_id的每个 Part
子文档的价格 .
{
_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);
}
做两个查询有点不理想,但我认为这可能是必要的 . 我只想使用一个查询来实现解决方案 .