我正在從 csv 檔案插入資料,如果物件鍵相同,我想更新然后新價格只會更新,我已經使用 csvtojson 來決議 csv 檔案并使用 multer 來上傳檔案。
csv 檔案有 itemNumber、title 和 price 列
樣本.csv
itemNumber,title,price
STY0047,Men Straight Fit Jeans,2500
STY0048,Men Straight Fit Jeans,2450
STY0049,Men Straight Fit Jeans,2550
STY0050,Men Straight Fit Jeans,3000
STY0048,Men Straight Fit Jeans,4000
STY002,Men Straight Fit Jeans,2550
STY0053,Men Straight Fit Jeans,3000
STY0054,Men Straight Fit Jeans,3000
STY0043,Men Straight Fit Jeans,4000
我的代碼
router.post("/file-insert-data", upload, async function (req, res, next) {
if (!req.file) {
return res.status(400).send("no file found");
}
const results = await csv().fromFile(req.file.path);
for (let obj in results ) {
const csvData = new csvModel(results [obj])
csvData.save((err, data) => {
if(err) {
return res.status(400).send("csv data is not inserted")
}
return res.status(201).send(data)
})
}
});
幫幫我謝謝
uj5u.com熱心網友回復:
這是一些常規的 javascript,但它突出upsert了新欄位的功能和特性。
// Assume results is an array of objects:
results.forEach(function(item) {
var prx = item['price']; // grab the price from the item...
// ...and now REMOVE it. This is because fields cannot appear in
// both $set and $setOnInsert. Our trick here is to make the $setOnInsert
// generic. ANY fields that are NOT itemNumber or price will automatically
// be added upon first insert. It should be obvious that if you need
// to upsert more things (i.e. more things to $set), then delete them from
// the object too. Note: $setOnInsert will only store the fields from
// item upon first insert. New fields in later items with an existing
// key will NOT be updated. Comment out the delete and see the error
// message re. path conflict:
delete item['price'];
rc=db.foo.updateOne({itemNumber: item['itemNumber']},
{$set: {price: prx}
,$setOnInsert: item // Ah! Set the WHOLE OBJECT.
},
{ upsert: true }
);
});
uj5u.com熱心網友回復:
- 嘗試使用該
findOne函式來檢查元素是否已經存在(我認為這itemNumber是模型的關鍵)。 - 如果沒有,創建一個新的實體
csvModel - 更新價格
- 保存資料
router.post('/file-insert-data', upload, async function (req, res, next) {
if (!req.file) {
return res.status(400).send('no file found');
}
try {
const results = await csv().fromFile(req.file.path);
let updatedData = []; // Array to store the updated data
for (const item of results) {
const { itemNumber, title, price } = item;
let csvData = await csvModel.findOne({ itemNumber });
if (!csvData) {
// Create new data if not present
csvData = new csvModel();
csvData.itemNumber = itemNumber;
csvData.title = title;
}
// Update the price
csvData.price = price;
// Save the created / updated data
await csvData.save();
updatedData.push(csvData);
}
return res.status(201).send(updatedData);
} catch (err) {
return res.status(500).send('Error updating data');
}
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/399373.html
標籤:javascript 节点.js MongoDB 表达
