Kiedy używasz mongoimport
aby zaimportować pliki do MongoDB, masz możliwość zastąpienia istniejących dokumentów, które pasują do tych, które importujesz.
Mam na myśli to, że jeśli importowany dokument ma ten sam _id
jako istniejący w kolekcji, do której importujesz, istniejący dokument zostanie zastąpiony dokumentem importowanym.
Możesz także określić inne pole (inne niż _id
pole) jako pasujące pole, jeśli jest to wymagane.
Sposób na zastąpienie istniejących dokumentów przy użyciu mongoimport
jest użycie upsert
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", "weight" : 20 } { "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }
I mamy następujący plik JSON o nazwie pets.json
:
{"_id":2,"name":"Fetch","type":"Dog"} {"_id":3,"name":"Scratch","type":"Cat","weight":10} {"_id":4,"name":"Hop","type":"Kangaroo","weight":60}
Następujące polecenie importuje plik JSON do kolekcji:
mongoimport --db=PetHotel --collection=pets --mode=upsert --file=data/pets.json
To używa upsert
tryb zastępowania pasujących dokumentów importowanymi.
Sprawdź wyniki
Przyjrzyjmy się teraz kolekcji.
db.pets.find()
Wynik:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Fetch", "type" : "Dog" } { "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 10 } { "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 }
Widzimy, że dokument 2 został całkowicie zastąpiony. Pies Bark
został zastąpiony psem Fetch
, a waga nie jest rejestrowana dla Fetch
.
Dokument 3 również został zastąpiony, a dokument 4 jest całkowicie nowym dokumentem.
Zmień pole/pola upsert
Możesz użyć --upsertFields
parametr do określenia pola innego niż _id
dla których można się zmierzyć. 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":"Fetch","type":"Dog","weight":20,"gooddog":true} {"name":"Scratch","type":"Cat","weight":15} {"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=upsert --upsertFields=name,type --file=data/pets2.json
Teraz ponownie sprawdźmy kolekcję:
db.pets.find()
Wynik:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 20, "gooddog" : true } { "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 15 } { "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 } { "_id" : ObjectId("5ff00800d99141016941217c"), "name" : "Bubbles", "type" : "Fish" }
Widzimy, że Fetch został zaktualizowany/zastąpiony (ale _id
wartość pozostaje taka sama). To samo ze Scratchem.
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.