简体   繁体   中英

Mongodb - Update property per object in array of object, Insert if doesn't exists

I wish to update a property per object in array of objects, but if some of the objects doesn't exists, insert the object instead.

Currently I used "upsert", which creates a new document when no document matches the query, unfortunately it is replacing a single item with my entire list.

Worth to mention that I am using mongoist to perform an async requests.

My code:

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

Found the way to do it:

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

and:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM