gpt4 book ai didi

node.js - 如何在 mongodb 中 insertMany 和更新重复项?

转载 作者:行者123 更新时间:2023-12-03 02:47:50 25 4
gpt4 key购买 nike

我有很多订单想要插入到 MongoDB 中,这些订单通过 orderID 进行唯一索引。

如果数据库中存在我的订单之一,我想插入所有订单并更新订单时间。

我尝试使用 updateMany 并将 upsert 设置为 true,但它没有按预期工作。

static async addOrders(ordersArray) {
const ordersTable = new mongoose.model('ordersTable', Schemas.ordersTable);

try {
const docs = await ordersTable.insertMany(ordersArray, {ordered: false});
return Promise.resolve('Data Inserted');
} catch (e) {
return Promise.reject(e);
}
}

最佳答案

您可以按如下方式找到重复项,然后可以删除它们并重新插入。

示例:

static async addOrders(ordersArray) {
const ordersTable = new mongoose.model('ordersTable', Schemas.ordersTable);

try {
const docs = await ordersTable.insertMany(ordersArray, {ordered: false});
return Promise.resolve('Data Inserted');
} catch (e) {
if (e.code === 11000){
// 1- getting duplicates
console.log('getting duplicates');

let orders = [];
const ordersIDs = e.result.result.writeErrors.map(error=>{
const parsedError = JSON.stringify(error);
const order = JSON.parse(parsedError).op;
orders.push(order);
return order.orderID;
});
// 2- removing old duplicates.
const deleted = await ordersTable.deleteMany({orderID:{'$in':ordersIDs}});
// 3- adding the orders
try{

const newAddedOrders = await ordersTable.insertMany(orders , {ordered : false});
return Promise.resolve('Data Inserted');
}catch (e) {
return Promise.reject(e);
}


}else return Promise.reject(e);

}

}

正如您在代码注释中看到的,我们首先获取重复项,然后删除和插入行。

关于node.js - 如何在 mongodb 中 insertMany 和更新重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56975629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com