Mam dwie kolekcje mongo, jedną, która odnosi się do env produkcji, a druga do env. Jak porównać różnicę między dwoma z nich? Próbowałem zrzucić je do bessy, a następnie przekonwertować na jsona. Ale nie mogę po prostu wykonać prostego porównania, ponieważ sortowanie może się różnić, a plik json jest zbyt duży, aby można go było posortować.Porównaj mongo diff w dwóch kolekcjach
Odpowiedz
Wykonaj następujące czynności w powłoce, spowoduje to iterację każdego elementu w kolekcji i spróbuje dopasować każdy dokument na podstawie identyfikatora.
Say mamy 2 zbiory db.col1
i 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 }
Możemy następnie utworzyć funkcję javascript, aby porównać 2 zbiory
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;
}
Wtedy nazywają się tak:
> compareCollection(db.col1, db.col2)
true
Jeśli będziemy mieli 3 kolekcje db.col3
> db.col3.find()
{ "_id" : 1, "item" : 1 }
I porównać ten
> compareCollection(db.col1, db.col3)
false
dostaniemy oczekiwanego rezultatu.
Jeśli mamy także 4th kolekcję, która ma pasujących dokumentów, ale dane rozróżnianie db.col4
> db.col4.find()
{ "_id" : 1, "item" : 10 }
{ "_id" : 2, "item" : 2 }
{ "_id" : 3, "item" : 3 }
{ "_id" : 4, "item" : 4 }
Będzie to również powrót false
> compareCollection(db.col1, db.col4)
false
Jeśli trzeba porównać tylko podzbiór pól (np nie musisz porównywać identyfikatorów), możesz to zrobić w następujący sposób. Eksportować zbiory do csv, określając pola porównać (source):
mongoexport -d <db_name> -c <col_name> --fields "field1,field2" --type=csv | sort > export.csv
A potem zrobić prosty diff
na csv plików. Zwróć uwagę, że kolejność kolumn w pliku csv odpowiada opcji --field
.
Plusy:
- można określić podzbiór pól do porównania.
- możesz zobaczyć rzeczywistą różnicę rekordów.
Wady:
- porównać pełną dokumentację, trzeba znać wszystkie możliwe pola.
mongoexport
może być powolny w przypadku dużych baz danych.
użyć Studio 3T do porównania mongodb. można porównać kolekcje, db, pojedyncze rekordy, jak również. wystarczy pobrać i podłączyć mongo. tu jest link do pobrania https://studio3t.com/
Może możesz dodać link do samouczka, jak to zrobić w tym konkretnym narzędziu. – testuser
Zwłaszcza, że ta funkcja nie jest częścią bezpłatnej wersji (nawet "taniej" licencji), ale tylko wersji Enterprise ... Jeśli ktoś ma narzędzie, to jest link do prawdziwego samouczka: https : //studio3t.com/whats-new/diff-mongodb/? utm_source = post & utm_medium = fb & utm_campaign = 3tslpage – testuser
dbHash zrobił sztuczkę:
use db_name
db.runCommand('dbHash')
Zwraca wartości hash dla każdej kolekcji. Następnie możesz je porównać. Jest całkiem dokładny.
- 1. Możliwość generowania duplikatów Mongo ObjectId w dwóch różnych kolekcjach?
- 2. Każde skrzyżowanie w dwóch kolekcjach
- 3. Zapisywanie obiektu Mongoose w dwóch kolekcjach
- 4. Porównaj elementy dwóch tablic
- 5. Porównaj RGB dwóch obrazów w IOS
- 6. porównaj, czy element istnieje na dwóch listach
- 7. PHP - porównaj strukturę dwóch obiektów JSON
- 8. Porównaj dwa obiekty według dwóch kryteriów
- 9. Jak wydrukować porównanie dwóch ciągów wielowierszowych w ujednoliconym formacie diff?
- 10. Wspólny algorytm generowania diff pól w dwóch komponentach bean?
- 11. Porównaj dwa pliki w UNIX
- 12. Porównaj foo.bar z dwóch różnych gałęzi w MAGIT
- 13. Splice na kolekcjach
- 14. Clojure: "=" porównuje wartości w kolekcjach, dlaczego nie może porównać dwóch list w tym przypadku?
- 15. XMLUnit - Porównaj dwa XML ignorujące zamówienie podrzędne
- 16. git diff dwóch plików o tej samej gałęzi, samych popełnić
- 17. Porównaj tylko część czasu z dwóch dat, ignorując datę część
- 18. Porównaj konfiguracje w programie Visual Studio?
- 19. Czy pojedyncza instancja modelu szkieletu może znajdować się w dwóch kolekcjach jednocześnie?
- 20. Mongo odnaleźć duplikaty wpisów dla dwóch lub więcej pól
- 21. Porównaj dwa pliki ignorujące zamówienie
- 22. Lepsze bezpieczeństwo typów w kolekcjach Java
- 23. Polimorficzne parametry typów w kolekcjach ogólnych
- 24. Suma wszystkich zliczeń w kolekcjach. Konto
- 25. Porównaj dwa XmlNodes w C#
- 26. Aptana File Diff?
- 27. implementacja diff w Javie
- 28. howto make diff wyglądać jak svn diff?
- 29. git diff z połączonej --word-diff
- 30. Porównaj element ignorujący element XML
jest to bardzo pomocne, dziękuję! –