MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comparer un diff mongo sur deux collections

Essayez ce qui suit dans le shell, il itérera chaque élément d'une collection et essaiera de faire correspondre chaque document en fonction de l'ID.

Disons que nous avons 2 collections db.col1 et 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 }

On peut alors créer une fonction javascript pour comparer 2 collections

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

Ensuite, l'appel ressemble à ceci :

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

Si nous avons alors une 3ème collections db.col3

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

Et comparez celui-ci

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

nous obtiendrons le résultat escompté.

Si nous avons également une 4ème collection qui a des documents correspondants mais des données différentes db.col4

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

Cela renverra également false

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