sql >> Database >  >> NoSQL >> MongoDB

Hoe kan ik meerdere objecten upsert met MongoDB &Node.js?

Gebruik de bulkWrite API om de updates uit te voeren:

var bulkUpdateOps = genres.map(function(doc) {
    return {
        "updateOne": {
            "filter": { "_id": doc.id },
            "update": { "$set": { "name": doc.name } },
            "upsert": true
        }
    };
});

db.collection('genres').bulkWrite(bulkUpdateOps, function(err, r) {
    // do something with result
})

Als je te maken hebt met grotere arrays, d.w.z.> 1000, overweeg dan om de schrijfbewerkingen in batches van 500 naar de server te sturen, wat je betere prestaties geeft, omdat je niet elk verzoek naar de server verzendt, maar slechts één keer per 500 verzoeken:

var bulkUpdateOps = [],
    counter = 0;

genres.forEach(function(doc) {
    bulkUpdateOps.push({
        "updateOne": {
            "filter": { "_id": doc.id },
            "update": { "$set": { "name": doc.name } },
            "upsert": true
        }
    });
    counter++;

    if (counter % 500 == 0) {
        db.collection('genres').bulkWrite(bulkUpdateOps, function(err, r) {
            // do something with result
        });
        bulkUpdateOps = [];
    }
})

if (counter % 500 != 0) {
    db.collection('genres').bulkWrite(bulkUpdateOps, function(err, r) {
        // do something with the result
    });
}


  1. PyMongo maakt een unieke index met 2 of meer velden

  2. Spring Data MongoDB 4.0-transacties ondersteunen

  3. Hoe MongoDB Community Edition op Ubuntu te installeren

  4. upsert een veld in een subdocument in een array op index in MongoDB