sql >> Database teknologi >  >> NoSQL >> MongoDB

Indsæt felt med matrixstørrelse i mongo

Du kan bruge .aggregate() metode til $project dine dokumenter og returner $size af elementerne. Derefter skal du gennemgå dit aggregeringsresultat ved hjælp af .forEach loop og $set feltet itemTotal for dit dokument ved hjælp af "Bulk" drift for maksimal effektivitet.

var bulkOp = db.myDocument.initializeUnorderedBulkOp(); 
var count = 0;

db.myDocument.aggregate([
    { "$match": { 
        "itemsTotal": { "$exists": false } ,
        "items": { "$exists": true }
    }}, 
    { "$project": { "itemsTotal": { "$size": "$items" } } }
]).forEach(function(doc) { 
        bulkOp.find({ "_id": doc._id }).updateOne({ 
            "$set": { "itemsTotal": doc.itemsTotal }
        });
        count++;
        if (count % 200 === 0) {
            // Execute per 200 operations and re-init
            bulkOp.execute();
            bulkOp = db.myDocument.initializeUnorderedBulkOp();
        }
})

// Clean up queues
if (count > 0) { 
    bulkOp.execute();
}


  1. Indsæt ydeevne af node-mongodb-native

  2. Hvordan gemmer man resultater fra dynamisk genererede formularer i MongoDb?

  3. Custom Cascading i Spring Data MongoDB

  4. MongoDB:er det muligt at fange TTL-begivenheder med Change Stream for at efterligne en skemalægger (cronjob)?