sql >> Database teknologi >  >> NoSQL >> MongoDB

Sammenlign en mongo diff på to samlinger

Prøv følgende i skallen, det vil gentage hvert element i en samling og forsøge at matche hvert dokument baseret på ID.

Lad os sige, at vi har 2 samlinger db.col1 og 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 derefter oprette en javascript-funktion til at sammenligne 2 samlinger

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

Så er opkald som følgende:

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

Hvis vi så har en 3. samling db.col3

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

Og sammenlign denne

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

vi får det forventede resultat.

Hvis vi også har en 4. samling, som har matchende dokumenter, men forskellige data db.col4

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

Dette vil også returnere false

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


  1. NodeJS + Mongo native – tjek om samling findes før forespørgsel

  2. redis forbindelsestimeout til fjernserver i en docker

  3. Sådan opdateres MongoDB-dokumenter med arrays af underdokumenter

  4. Få min og maks værdi i enkelt forespørgsel i mongodb