我试图导入 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/