javascript - 如何将数组对象更新到mongoDB

标签 javascript node.js 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' } ]

我的 Bank.byId 看起来像这样(它使用 for 循环并将所有 mongoDB 文档保存为本地)

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

在 MongoDB 指南针中,它看起来像这样 sample documents in 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 键会将数据作为新数据插入。

关于javascript - 如何将数组对象更新到mongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57193151/

相关文章:

javascript - 为什么我不能使用 iframe 对象和 jQuery 遍历这个元素?

javascript - 当我想要排序或过滤数据时,如何监视 redux 容器中的数据状态?

javascript - Express.js API 调用导致我的服务器崩溃

json - 我在哪里可以获得要在 MongoDB 中使用的示例 JSON 数据

javascript - 区分人类生成的事件和旧 IE 中生成的浏览器事件

javascript - 在加载应用程序根目录之前,Index.html 样式不会激活

javascript - JS文件上传: Detect Encoding

javascript - 如果有其他 promise

javascript - 如何使用 Node JS 驱动程序创建新的 MongoDb 数据库

javascript - Mongoose 'or' 和 'like' 运营商 node.js