【问题标题】:Mongodb - Update property per object in array of object, Insert if doesn't existsMongodb - 更新对象数组中每个对象的属性,如果不存在则插入
【发布时间】:2021-07-14 17:21:34
【问题描述】:

我希望更新对象数组中每个对象的属性,但如果某些对象不存在,请插入该对象。

目前我使用“upsert”,当没有文档与查询匹配时创建一个新文档,不幸的是它正在用我的整个列表替换单个项目。

值得一提的是,我正在使用 mongoist 来执行异步请求。

我的代码:

    this.tokenArray = [
 { token: "654364543" },
 { token: "765478656" },
 { token: "876584432" },
 { token: "125452346" },
 { token: "874698557" },
 { token: "654364543" }
 ]

 database.upsertDatebaseItem(this.tokenArray.map(x => { return x.token }), { valid : true }, 'Tokens');


 async upsertDatebaseItem(itemKey, itemValue, collectionName) {
    try {
        await this.database[collectionName].update({ token : { $in: itemKey}}, { $set: itemValue }, {upsert : true} , {multi : true});
    } catch (error) {
        console.log(`An error occurred while attempting to update ${itemType} to the database: ${error}`);
        return false;
    }
 }

【问题讨论】:

    标签: javascript node.js mongodb


    【解决方案1】:

    找到了方法:

    const bulkUpdate = this.tokenArray.map((x) => {
                return {
                    "updateOne": {
                        "filter": { "token": x.token },
                        "update": { "$set": { "valid": true } },
                        "upsert": true
                    }
                };
            });
    

    和:

    this.database[collectionName].bulkWrite(bulkUpdate);
    

    【讨论】:

      【解决方案2】:

      要使用 mongoist 进行 upsert,请使用以下命令:

      var bulk = db.collection.initializeOrderedBulkOp()
      for(var doc of docs) bulk.find( { _id: doc._id } ).upsert().updateOne(doc); // or use replaceOne()
      await bulk.execute();
      

      转换为您的情况

      var bulk = db.collectionName.initializeOrderedBulkOp()
      for(var tokenItem of tokenArray) bulk.find( { token : tokenItem.token } ).upsert().updateOne(tokenItem); // or use replaceOne()
      await bulk.execute();
      

      【讨论】:

        猜你喜欢
        • 2020-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-21
        • 2019-07-14
        • 1970-01-01
        相关资源
        最近更新 更多