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