猫鼬:更新数组内部的嵌套数组

时间:2018-10-26 02:30:56

标签: javascript arrays node.js mongodb mongoose

我试图弄清楚如何使用Mongoose更新数组中的嵌套数组。在我的User集合中,我有一个customer数组,其中包含客户信息,还有一个嵌套的fleet数组,其中包含客户的机队设备。我正在尝试通过fleet请求更新PUT数组,但是遇到了困难。

我部分地认为不可能在这样的数组中更新嵌套数组,也许我应该为customerfleet创建一个单独的模式。无论如何,这是我的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中不是很好,更新它们似乎很痛苦。预先感谢您的阅读!

0 个答案:

没有答案