【问题标题】:How to insertMany and update duplicates in mongodb?如何在 mongodb 中插入和更新重复项?
【发布时间】:2019-11-20 08:55:16
【问题描述】:

我有很多订单要插入 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);
    }
}

【问题讨论】:

    标签: node.js mongodb mongoose insert insert-update


    【解决方案1】:

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

    示例:

    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);
    
    }
    

    }

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

    【讨论】:

      猜你喜欢
      • 2012-04-21
      • 1970-01-01
      • 2019-10-19
      • 2021-03-27
      • 1970-01-01
      • 2019-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多