MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Сравнете mongo diff в две колекции

Опитайте следното в обвивката, тя ще повтори всеки елемент в колекция и ще се опита да съпостави всеки документ въз основа на ID.

Да кажем, че имаме 2 колекции db.col1 и 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 }

След това можем да създадем функция на javascript за сравняване на 2 колекции

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

Тогава извикването е като следното:

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

Ако тогава имаме трета колекция db.col3

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

И сравнете този

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

ще получим очаквания резултат.

Ако имаме и 4-та колекция, която има съответстващи документи, но различни данни db.col4

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

Това също ще върне false

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongodb findOne с обяснение

  2. Извличане, моделиране и промяна на модела на данни с mongoid/mongodb

  3. Има ли mongoose / mongodb достъп до препратки към обекти в схема по време на агрегат?

  4. Създаване на DB услуга в приложение MVC Express

  5. Как да проверите текущата конфигурация на MongoDB