sql >> Databasteknik >  >> NoSQL >> MongoDB

Jämför en mongo diff på två samlingar

Prova följande i skalet, det upprepar varje objekt i en samling och försöker matcha varje dokument baserat på ID.

Säg att vi har 2 samlingar db.col1 och db.col2 :

> db.col1.find()
{ "_id" : 1, "item" : 1 }
{ "_id" : 2, "item" : 2 }
{ "_id" : 3, "item" : 3 }
{ "_id" : 4, "item" : 4 }

> db.col2.find()
{ "_id" : 1, "item" : 1 }
{ "_id" : 2, "item" : 2 }
{ "_id" : 3, "item" : 3 }
{ "_id" : 4, "item" : 4 }

Vi kan sedan skapa en javascript-funktion för att jämföra 2 samlingar

function compareCollection(col1, col2){
    if(col1.count() !== col2.count()){
        return false;
    }

    var same = true;

    var compared = col1.find().forEach(function(doc1){
        var doc2 = col2.findOne({_id: doc1._id});

        same = same && JSON.stringify(doc1)==JSON.stringify(doc2);
    });

    return same;
}

Då är samtalet så här:

> compareCollection(db.col1, db.col2)
true

Om vi ​​då har en 3:e samling db.col3

> db.col3.find()
{ "_id" : 1, "item" : 1 }

Och jämför den här

> compareCollection(db.col1, db.col3)
false

vi får det förväntade resultatet.

Om vi ​​också har en fjärde samling som har matchande dokument men olika data db.col4

> db.col4.find()
{ "_id" : 1, "item" : 10 }
{ "_id" : 2, "item" : 2 }
{ "_id" : 3, "item" : 3 }
{ "_id" : 4, "item" : 4 }

Detta kommer också att returnera false

> compareCollection(db.col1, db.col4)
false


  1. Hur kör jag ett MongoDB js-skript med Java MongoDriver

  2. mongodb-fel vid validering av inställningar:endast ett positionsargument är tillåtet

  3. Är det möjligt att förbättra Mongoexport-hastigheten?

  4. yum installera mongodb 3.2 misslyckas