我试图弄清楚如何使用Mongoose更新数组中的嵌套数组。在我的User
集合中,我有一个customer
数组,其中包含客户信息,还有一个嵌套的fleet
数组,其中包含客户的机队设备。我正在尝试通过fleet
请求更新PUT
数组,但是遇到了困难。
我部分地认为不可能在这样的数组中更新嵌套数组,也许我应该为customer
和fleet
创建一个单独的模式。无论如何,这是我的User
模式当前的样子:
{
"username": "xps_maint",
"password": "0000",
"registerDate": "2018-10-24T13:37:12.093Z",
"_id": "5bd07612d63de74932734d92",
"customer": [
{
"name": "Freight Service ",
"email": "info@fsllc.com",
"dotInterval": "90 days",
"fleet": [
{
"unitType": "Box Truck",
"unitNumber": "BT-61318",
"vinNumber": "1XXXYYYUUUZZ3222",
"_id": "5bd0aef1e2abd64b12e0ab42"
},
{
"unitType": "Cargo Van",
"unitNumber": CV-78453",
"vinNumber": "4ZZYYYTTUZZ3JK2",
"_id": "5bd0aef1e2arg64b15e0ab43"
}
],
"_id": "5bd0821f79f9454b06b2c2bf"
}
],
"__v": 0
}
这是我的PUT
路线,用于更新fleet
阵列:
router.put('/customers/fleet/:equipmentid', customer_controller.customer_update_fleet);
最后是fleet
更新控制器的外观:
exports.customer_update_fleet = (req, res) => {
const { body, params } = req;
const { unitType, unitNumber, vinNumber } = body;
const { equipmentid } = params;
const updatedEquipment =
{
unitType: unitType,
unitNumber: unitNumber,
vinNumber: vinNumber,
}
User.updateOne({ 'customer.$.fleet': { _id: equipmentid }}, { $set: { 'customer.$.fleet': { updatedEquipment} } }, (err) => {
if (err)
throw err;
else
res.send('Success!!');
});
}
我认为这可能行得通,因为我有一条类似的PUT
路由,它通过customer
仅更新User
模式中的Model.updateOne()
数组。但是,当尝试更深入进入每个fleet
内的嵌套customer
数组时,这似乎无法以相同的方式工作。
我可能会遇到所有错误,因此,我竭尽全力为User
模式建模提供更好的方法。我确实部分地认为,将数组嵌套在这样的Schema中不是很好,更新它们似乎很痛苦。预先感谢您的阅读!