sql >> Databáze >  >> NoSQL >> MongoDB

Porovnejte mongo rozdíl na dvou kolekcích

Zkuste následující v shellu, iteruje každou položku v kolekci a pokusí se porovnat každý dokument na základě ID.

Řekněme, že máme 2 kolekce db.col1 a 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 }

Poté můžeme vytvořit javascriptovou funkci pro porovnání 2 kolekcí

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

Potom hovor vypadá následovně:

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

Pokud pak máme 3. kolekci db.col3

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

A porovnejte tento

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

dostaneme očekávaný výsledek.

Pokud máme také 4. kolekci, která má odpovídající dokumenty, ale odlišná data db.col4

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

To také vrátí false

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


  1. MongoDB a Asp Core aktualizují pouze pár klíč:hodnota namísto celého modelu

  2. Kdy Redis? Kdy MongoDB?

  3. Jak seskupovat zadáním funkce pro načtení klíče?

  4. Birt mongodb param