Mongoose: обновление вложенного массива внутри массива

Я пытаюсь понять, как обновить вложенный массив внутри массива с помощью 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. Я частично думаю, что не очень хорошо иметь массивы, глубоко вложенные в такие схемы, как эта, они кажутся проблемой для обновления. Заранее благодарим за прочтение!

stackoverflow.com/questions/49597359/…
Deval 26.10.2018 04:48

Вы пробовали с db.collection.update() или db.collection.findAndModify()?

user2814599 26.10.2018 09:01
1
2
69
0

Другие вопросы по теме