У меня есть две коллекции mongo, одна из которых относится к производственной env, а другая к тестированию env. Как сравнить разницу между двумя из них? Я попытался сбросить их до бсонов, а затем перешел к json. Но я не могу просто выполнить простой diff, потому что сортировка может отличаться, и файл json слишком велик для сортировки.Сравните mongo diff на две коллекции
ответ
Попробуйте следующее в оболочке, оно будет перебирать каждый элемент в коллекции и попытаться сопоставить каждый документ на основе идентификатора.
Скажет, у нас есть 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 }
Затем мы можем создать яваскрипт функцию для сравнения 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
Если у нас есть 3 коллекции db.col3
> db.col3.find()
{ "_id" : 1, "item" : 1 }
И сравните это один
> compareCollection(db.col1, db.col3)
false
мы получим ожидаемый результат.
Если у нас есть 4-ый сборник, который имеет соответствующие документы, но diffrent данные 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
Если вам нужно сравнить только подмножество полей (например, вам не нужно сравнивать идентификаторы), вы можете сделать это следующим образом. Экспорт коллекции CSV, с указанием полей для сравнения (source):
mongoexport -d <db_name> -c <col_name> --fields "field1,field2" --type=csv | sort > export.csv
А затем сделать простой diff
на CSV-файлов. Обратите внимание, что порядок столбцов в файле csv соответствует опции --field
.
Плюсы:
- можно указать подмножество полей для сравнения.
- вы можете видеть фактический разброс записей.
Минусы:
- для сравнения полные записи, вы должны знать все возможные поля.
mongoexport
может быть медленным для огромных баз данных.
использование Studio 3T для сравнения mongodb. вы можете сравнить коллекции, db, одиночные записи. просто вам нужно скачать и подключить монго. здесь ссылка на https://studio3t.com/
Возможно, вы можете добавить ссылку на какой-то учебник о том, как это сделать в этом конкретном инструменте. – testuser
Тем более, что эта функция не является частью бесплатной версии (даже не «дешевой» лицензии), а только Enterprise Edition ... Если у кого-то есть инструмент, вот ссылка на настоящий учебник: https : //studio3t.com/whats-new/diff-mongodb/ utm_source = пост & utm_medium = фб & utm_campaign = 3tslpage – testuser
dbHash сделал трюк:
use db_name
db.runCommand('dbHash')
Он возвращает хэш-значения для каждой коллекции. Затем вы можете сравнить их. Это довольно точно.
- 1. Сравните две коллекции с LINQ
- 2. Сравните две строки (аналогично тому, как это делает GNU diff)
- 3. MySQL - сравните две таблицы и сгенерируйте файл SQL diff
- 4. Сравните две базы данных couchdb
- 5. Lodash/JavaScript: Сравните две коллекции и вернуть разницу
- 6. JQuery diff две даты
- 7. Diff коллекции объектов в PHP
- 8. Сравните две таблицы данных
- 9. Diff две последовательности идентификатора
- 10. хотите объединить две коллекции в mongo db, используя карту уменьшить
- 11. Сравните две статьи
- 12. Сравните две даты. Sqlite
- 13. C++ - сравните две даты
- 14. Сравните две подсети ip
- 15. Сравните две переменные DateTime
- 16. java Сравните две даты
- 17. Сравните две длинные строки
- 18. Mongo и блокированные коллекции
- 19. MongoDb запрос на две коллекции
- 20. Объединить две коллекции на mongodb
- 21. Сравните две ячейки на основе их цвета
- 22. Сравните две поля даты в MongoDB
- 23. Сравните две даты с диапазоном
- 24. Сравните первые две десятичные точки
- 25. Oracle: Сравните две версии процедуры
- 26. Сравните строку в две половины
- 27. OpenOffice Сравните две строки ячеек
- 28. Сравните две страницы HTML, представленные за брандмауэром
- 29. Сравните две даты в smarty
- 30. Сравните две переменные каждые галочки
Это очень полезно, спасибо! –