MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Compare um mongo diff em duas coleções


Tente o seguinte no shell, ele irá iterar cada item dentro de uma coleção e tentar corresponder a cada documento com base no ID.

Digamos que temos 2 coleções db.col1 e 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 }

Podemos então criar uma função javascript para comparar 2 coleções
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;
}

Então a chamada é como a seguinte:
> compareCollection(db.col1, db.col2)
true

Se tivermos uma terceira coleção db.col3
> db.col3.find()
{ "_id" : 1, "item" : 1 }

E compare este
> compareCollection(db.col1, db.col3)
false

teremos o resultado esperado.

Se também tivermos uma 4ª coleção com documentos correspondentes, mas dados diferentes db.col4
> db.col4.find()
{ "_id" : 1, "item" : 10 }
{ "_id" : 2, "item" : 2 }
{ "_id" : 3, "item" : 3 }
{ "_id" : 4, "item" : 4 }

Isso também retornará false
> compareCollection(db.col1, db.col4)
false