[英]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.