Как сравнить 2 коллекции mongodb? - PullRequest
11 голосов
/ 11 февраля 2012

Я пытаюсь «сравнить» все документы между 2 коллекциями, которые будут возвращать только значение true, и если все документы внутри 2 коллекций будут абсолютно одинаковыми.

Я искал методы в коллекции, но не смог найти такой, который мог бы это сделать.

Я экспериментировал с чем-то вроде этого в оболочке Монго, но не работал, как ожидал:

db.test1 == db.test2

или

db.test1.to_json() == db.test2.to_json()

В любом случае, я также использую mongodb spring-data в java.

Пожалуйста, поделитесь своими мыслями!Спасибо.

1 Ответ

13 голосов
/ 11 февраля 2012

Вы можете попробовать использовать mongodb eval в сочетании с пользовательской функцией equals, что-то вроде this .

Ваши методы не работают, потому что в первом случае вы сравниваете ссылки на объекты, которые не совпадают. Во втором случае нет гарантии, что to_json сгенерирует одну и ту же строку даже для одинаковых объектов.

Вместо этого попробуйте что-то вроде этого:

var compareCollections = function(){
    db.test1.find().forEach(function(obj1){
        db.test2.find({/*if you know some properties, you can put them here...if don't, leave this empty*/}).forEach(function(obj2){
            var equals = function(o1, o2){
                // here goes some compare code...modified from the SO link you have in the answer.
            };

            if(equals(ob1, obj2)){
                // Do what you want to do
            }
        });
    });
};

db.eval(compareCollections);

С помощью db.eval вы гарантируете, что код будет выполняться на стороне сервера базы данных, без выборки коллекций клиенту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...