繁体   English   中英

如何将数组对象更新为mongoDB

[英]How to update array object to mongoDB

我试图导入CSV并将数据保存到MongoDB中,导入CSV应该具有包含功能,如果存在具有不同值的现有文档,则CSV数据将自动更新为MongoDB。 我所做的部分是将不存在的文档插入到MongoDB中,但没有将其插入到更新功能中。 下面的代码是我到目前为止编写的代码。

Bank.csvAdd = function (csvData) {
if (csvData.length > 0) {
    let id;
    let validate;
    let arr = [];
    let csvaddArray = [], aux = {}, csvUpdateArray = [];


    for (let i = 0; i < csvData.length; ++i) {
        validate = false;
        for (let b of Object.values(Bank.byId)) {
            console.log("B.id :", Bank.byId);
            console.log("B.name :", b);
            if (csvData[i].name === b._name) {
                validate = true;
                break;
            }
            if (csvData[i].code === b._code) {
                validate = true;
                break;
            }
        }
        if (validate === false) {
            id = require.main.Nebula.generateId(6);
            if (!Bank.byId[id]) {
                aux = {
                    id: id,
                    name: csvData[i].name,
                    code: csvData[i].code
                }
                csvaddArray.push(aux);
            }
        }
        if (validate == true) {
            csvUpdateArray.push(csvData[i]);
        }
    }


    console.log("CSV data arr: ", csvaddArray);
    let col = require.main.Nebula.i.db.collection("bank");

    for (let i = 0; i < csvUpdateArray.length; ++i) {
        let col = require.main.Nebula.i.db.collection("bank");
        col.update({ id: csvUpdateArray[i].id }, csvUpdateArray[i], {upsert: true, multi: true });
    }


    col.insertMany(csvaddArray, function (err, res) {
        arr = csvaddArray.map(
            obj => {
                return {
                    "id": obj.id,
                    "_name": obj.name,
                    "_code": obj.code
                }
            }
        );

        for (let i = 0; i < arr.length; ++i) {
            Bank.byId[arr[i].id] = arr[i];
        }

        if (err) {
            throw {
                status: 2,
                data: err
            }
        };

    });
    throw {
        status: 1,
        data: arr
    }
}
else {
    throw {
        status: 3,
        data: Error

    };
}}

我的csvaddArray看起来像这样(与csvUpdateArray相同)

[ { id: 'qZp2mK', name: 'Maybank Berhad', code: 'MBB' }, { id: 'OBs79c', name: 'Standard Chartered Malaysia', code: 'SCM' } ]

My Bank.byId如下所示(用于循环并将所有mongoDB文档保存为本地文件)

{ '7b3wJ9': Bank { id: '7b3wJ9', _name: 'Maybank Berhad', _code: 'MBB' },'2OS4Y4': Bank { id: '2OS4Y4', _name: 'Standard Chartered Malaysia', _code: 'SCM' }}

在MongoDB指南针中,看起来像此样例在mongoDB中

首先尝试对功能进行尽可能短的编码,以提高执行速度。

     for (let i = 0; i < csvUpdateArray.length; ++i) {
          let col = require.main.Nebula.i.db.collection("bank");
          col.update({id:csvUpdateArray[i].id},{$set: 
          {name:csvUpdateArray[i].name,code:csvUpdateArray[i].code}}, 
           {upsert:true,multi:true},function(err,updated)
             {

             })
          }

在上面的代码中,将使用关键字{upsert:true}进行插入和更新,如果id已存在,它将进行更新,如果不存在,则此upsert密钥会将数据作为新的插入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM