Kiedy używasz mongoimport
aby zaimportować pliki do MongoDB, masz możliwość połączenia istniejących dokumentów z tymi, które importujesz.
W takim przypadku, jeśli importowany dokument ma ten sam _id
jako istniejący w kolekcji, do której importujesz, istniejący dokument zostanie scalony z importowanym.
Możesz także określić inne pole (inne niż _id
pole) jako pasujące pole, jeśli jest to wymagane.
Podczas scalania dokumentów wynikowy dokument połączy istniejące dane z nowymi danymi znajdującymi się w importowanym pliku. Wszelkie dane, które są takie same, pozostaną takie same. Wszelkie sprzeczne dane spowodują, że dane importowanego pliku zastąpią istniejące dane. Jeśli importowany dokument nie zawiera pola, które znajduje się w odpowiednim dokumencie w kolekcji MongoDB, to pole pozostanie niezmienione w kolekcji (tzn. nie zostanie usunięte ani zmienione).
Sposób na scalanie dokumentów za pomocą mongoimport
jest użycie merge
tryb.
Przykład
Załóżmy, że mamy kolekcję o nazwie pets
które zawierają następujące dokumenty:
db.pets.find()
Wynik:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" } { "_id" : 2, "name" : "Bark", "type" : "Dog" } { "_id" : 3, "name" : "Meow", "type" : "Cat" }
I mamy następujący plik JSON o nazwie pets.json
:
{"_id":2.0,"name":"Fetch","type":"Dog","weight":40.0} {"_id":3.0,"weight":10.0} {"_id":4.0,"name":"Hop","type":"Kangaroo","weight":60.0}
Następujące polecenie importuje plik JSON do kolekcji:
mongoimport --db=PetHotel --collection=pets --mode=merge --file=data/pets.json
To używa merge
tryb scalania pasujących dokumentów z importowanymi.
Sprawdź wyniki
Przyjrzyjmy się teraz kolekcji.
db.pets.find()
Wynik:
{ "_id" : 1, "name" : "Wag", "type" : "Dog" } { "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 40 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 10 } { "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 }
Widzimy, że dokument 1 jest niezmieniony, pole nazwy dokumentu 2 zostało zmienione na Fetch
, a także miał weight
pole dodane.. Do dokumentu 3 dodano również pole wagi, a dokument 4 został wstawiony.
Zmień pole/pola upsert
Możesz użyć --upsertFields
parametr do określenia pola innego niż _id
do dopasowania. Używając tego parametru, przekaż pola jako listę oddzieloną przecinkami.
Załóżmy, że mamy inny plik JSON o nazwie pets2.json
który chcemy zaimportować i wygląda to tak:
{"name":"Wag","type":"Dog","weight":20.0,"gooddog":true} {"name":"Bubbles","type":"Fish"}
Ten dokument nie zawiera _id
pole, więc musielibyśmy dopasować się do innych pól, które jednoznacznie identyfikują każdy dokument. W tym przypadku możemy użyć name
i type
pola.
Możemy zatem użyć następującego mongoimport
polecenie:
mongoimport --db=PetHotel --collection=pets --mode=merge --upsertFields=name,type --file=data/pets2.json
Teraz ponownie sprawdźmy kolekcję:
db.pets.find()
Wynik:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "gooddog" : true, "weight" : 20 } { "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 40 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 10 } { "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 } { "_id" : ObjectId("5ff0548dd991410169412300"), "name" : "Bubbles", "type" : "Fish" }
Widzimy, że Wag został zaktualizowany (ale _id
wartość pozostaje taka sama).
Z drugiej strony bąbelki nie pasowały do pól upsert i dlatego zostały wstawione.
Sprawdź mongoimport
mongoimport
jest częścią pakietu MongoDB Database Tools. Narzędzia baz danych MongoDB to zestaw narzędzi wiersza poleceń do pracy z MongoDB.
Jeśli nie masz pewności, czy masz narzędzia bazy danych MongoDB/mongoimport
zainstalowany, spróbuj uruchomić następujące polecenie w terminalu lub wierszu polecenia, aby sprawdzić:
mongoimport --version
Jeśli go masz, powinieneś zobaczyć informacje o wersji itp. Jeśli go nie masz, możesz skorzystać z instrukcji instalacji na stronie MongoDB, aby zainstalować ją w swoim systemie.
Gdzie uruchamiać polecenia?
Nie zapomnij, musisz uruchomić mongoimport
polecenia z wiersza poleceń systemu (np. nowe okno terminala lub wiersza polecenia).
Nie uruchamiaj ich z mongo
powłoka.