Как обновить несколько записей в MongoDB, используя node.js, передав массив массива объектов? - PullRequest
1 голос
/ 04 апреля 2020

Я хочу обновить несколько записей в MongoDB, передав массив массива объекта за один раз, и я использую node.js для кода на стороне сервера.

Я видел большую часть стека поток вопросов и ответов, но это не подходит для моего сценария.

MongoDB Версия: 4.2

Node.JS Версия: 12

Название коллекции: пользователи

Пример объекта: старые данные в MongooDB:

    [{
    _id:"5e84def87f7eb9eed40315e6",
    name:"Sree",
    gender:"female",
    age:21
    },{
    _id:"5e7d989c0fb4a65a1f7b3e0c",
    name:"siva",
    gender:"male",
    age:25
    },{
    _id:"5e7da2cf0fb4a65a1f7b3e0d",
    name:"Yuvi",
    gender:"male",
    age:28
    },{
    _id:"5e84de501612a7c1c07810b8",
    name:"Peeter",
    gender:"male",
    age:21
   }]

Ожидаемый объект должен обновляться в MongoDB:

[{
    _id:"5e84def87f7eb9eed40315e6",
    name:"Sree Siva",
    gender:"female",
    age:26
    },{
    _id:"5e7d989c0fb4a65a1f7b3e0c",
    name:"Siva Palaniappan",
    gender:"male",
    age:35
    },{
    _id:"5e7da2cf0fb4a65a1f7b3e0d",
    name:"Yuvi Gopi",
    gender:"male",
    age:30
    },{
    _id:"5e84de501612a7c1c07810b8",
    name:"Peeter Hey",
    gender:"male",
    age:30
 }]

Образец объекта, полученного из внешнего интерфейса - через API Post Post - Я получаю объект ниже полезной нагрузки (запрос)

{
    "postData":[{
            _id:"5e84def87f7eb9eed40315e6",
            name:"Sree Siva",
            gender:"female",
            age:26
            },{
            _id:"5e7d989c0fb4a65a1f7b3e0c",
            name:"Siva Palaniappan",
            gender:"male",
            age:35
            },{
            _id:"5e7da2cf0fb4a65a1f7b3e0d",
            name:"Yuvi Gopi",
            gender:"male",
            age:30
            },{
            _id:"5e84de501612a7c1c07810b8",
            name:"Peeter Hey",
            gender:"male",
            age:30
         }]
}

Образец кода:

let postObj = req.body.postData;
            postObj.forEach(element => {
                let payLoadObj = {
                    name:element.name,
                    gender:element.gender,
                    age:element.age

                }
                users.updateOne({ _id: element._id}, payLoadObj, (err, updtOrder) => {
                    if (err) {
                        serverErr(err, res);
                        return;
                    } else {
                        if (updtOrder.nModified !== 0) {
                            res.status(200).send({ err: null, data: 'Successfully Updated' });
                        }else{
                           res.status(200).send({ err: null, data: 'Not Updated' });
                        }
                    }
            });

Примечание: На основании _id мы должны обновить все поля без использования forEach , и я попытался arrayFilter aslo .

...