sql >> Database >  >> NoSQL >> MongoDB

Vergelijk een mongo-diff op twee collecties

Probeer het volgende in de shell, het zal elk item binnen een verzameling herhalen en proberen elk document te matchen op basis van ID.

Stel dat we 2 verzamelingen hebben db.col1 en 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 }

We kunnen dan een javascript-functie maken om 2 collecties te vergelijken

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

Dan is bellen als volgt:

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

Als we dan een 3e verzameling hebben db.col3

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

En vergelijk deze

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

we krijgen het verwachte resultaat.

Als we ook een 4e collectie hebben die overeenkomende documenten heeft maar andere gegevens db.col4

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

Dit retourneert ook false

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


  1. Waarde halen uit een MongoDB-document

  2. Kan MongoDB strings van UTF-8 opslaan en manipuleren met codepunten buiten het meertalige basisvlak?

  3. MongoDB:update elk document op één veld

  4. Open Redis-poort voor externe verbindingen