Как сравнить 2 коллекции mongodb?

Im пытается "сравнить" все документы между 2 коллекциями, которые вернут true только, и если только все документы внутри 2 коллекций точно равны.

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

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

db.test1 == db.test2

или

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

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

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

1 ответов


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

ваши методы не работают, потому что в первом случае вы сравниваете ссылки на объекты, которые не совпадают. Во втором случае нет никакой гарантии, что 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 вы гарантируете, что код будет выполняться на стороне сервера базы данных без выборки коллекций клиенту.