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

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

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

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

db.test1 == db.test2

или

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

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

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

Ответ 1

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

Ответ 2

Используйте Studio 3T (бесплатная пробная версия). Это графический интерфейс MongoDB, который позволяет легко сравнивать базы данных и коллекции, выявлять различия в документах и ​​полях, а затем синхронизировать ваши данные по мере необходимости: https://studio3t.com/whats-new/diff-mongodb/