MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Tryby importu mongoimport

Podczas korzystania z mongoimport aby zaimportować pliki do MongoDB, możesz określić tryb do użycia. Te tryby określają, co się stanie, jeśli w kolekcji, do której próbujesz zaimportować, znajdują się już pasujące dokumenty.

Domyślnie mongoimport używa insert tryb, ale istnieją inne tryby, których możesz użyć. Tryb, z którego korzystasz, będzie zależał od tego, co próbujesz zrobić.

Poniżej znajduje się przegląd każdego trybu wraz z przykładami.

Tryby

Tryby importu dostępne w mongoimport są następujące:

Tryb Opis
insert To jest tryb domyślny. Ten tryb wstawia dokumenty z pliku importu. Jeśli pasujący dokument już istnieje w kolekcji, wystąpi błąd. Pasujący dokument to taki, który ma ten sam unikalny identyfikator (taki jak pasujący _id pole) jako dokument w pliku importu.
upsert Zastępuje istniejące dokumenty w bazie danych pasującymi dokumentami z pliku importu. Wszystkie inne dokumenty są wstawione.
merge Scala istniejące dokumenty, które pasują do dokumentu w pliku importu, z nowym dokumentem. Wszystkie inne dokumenty są wstawione.
delete Usuwa istniejące dokumenty w bazie danych, które pasują do dokumentu w pliku importu. Wszelkie niezgodne dokumenty nie mają wpływu.

Poniżej znajdują się przykłady działania każdego trybu.

Tryb wstawiania

Załóżmy, że mamy kolekcję o nazwie pets z następującymi dokumentami:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }

Jak się okazuje, zostały one zaimportowane w pliku o nazwie pets.json .

Teraz wyobraź sobie, że mamy inny plik JSON o nazwie pets2.json , który zawiera następujące dokumenty JSON:

{ "_id" : 1, "weight": 40 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight": 10 }
{ "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight": 5 }
{ "_id" : 4, "name" : "Bubbles", "type" : "Fish", "weight": 3 }

Oto, co się stanie, jeśli spróbujemy zaimportować to do naszych pets zbieranie podczas używania (domyślnie) insert tryb.

mongoimport --db=PetHotel --collection=pets --file=pets2.json

Wyjście:

2021-01-03T10:07:23.421+1000	connected to: mongodb://localhost/
2021-01-03T10:07:23.422+1000	continuing through error: E11000 duplicate key error collection: PetHotel.pets index: _id_ dup key: { _id: 1 }
2021-01-03T10:07:23.422+1000	continuing through error: E11000 duplicate key error collection: PetHotel.pets index: _id_ dup key: { _id: 2 }
2021-01-03T10:07:23.422+1000	continuing through error: E11000 duplicate key error collection: PetHotel.pets index: _id_ dup key: { _id: 3 }
2021-01-03T10:07:23.423+1000	1 document(s) imported successfully. 3 document(s) failed to import.

Zgodnie z tym komunikatem o błędzie zaimportowano tylko jeden z czterech dokumentów. Pozostałe trzy spowodowały błąd z powodu zduplikowanego klucza w _id pole.

Przyjrzyjmy się teraz kolekcji.

db.pets.find()

Wynik:

{ "_id" : 1, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Bark", "type" : "Dog" }
{ "_id" : 3, "name" : "Meow", "type" : "Cat" }
{ "_id" : 4, "name" : "Bubbles", "type" : "Fish", "weight" : 3 }

Widzimy więc, że ostatni dokument został wstawiony. Jest to oczekiwane, ponieważ wcześniej nie mieliśmy dokumentu z _id wartość 4 .

Tryb przesunięty

Oto, co się stanie, jeśli użyjemy upsert tryb, aby wstawić ten sam dokument.

mongoimport --db=PetHotel --collection=pets --mode=upsert --file=pets2.json

Wyjście:

2021-01-03T10:19:55.400+1000	connected to: mongodb://localhost/
2021-01-03T10:19:55.444+1000	3 document(s) imported successfully. 0 document(s) failed to import.

Dane wyjściowe mówią nam, że 3 z 4 dokumentów zostały pomyślnie zaimportowane i nie było żadnych błędów.

Sprawdźmy kolekcję.

db.pets.find()

Wynik:

{ "_id" : 1, "weight" : 40 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 5 }
{ "_id" : 4, "name" : "Bubbles", "type" : "Fish", "weight" : 3 }

Widzimy, że pierwsze trzy dokumenty zostały zastąpione dokumentami z pliku importu. Czwarty dokument pozostaje taki sam, jak po poprzednim imporcie.

Zauważ, że pierwszy dokument stracił swoją name i type pola. Dzieje się tak, ponieważ upsert tryb zastępuje cały dokument, a nasz dokument zastępczy ma tylko weight pole (jak również _id pole).

Tryb scalania

Zmodyfikujmy nasz pets2.json plik tak, aby wyglądał tak:

{ "_id" : 1, "name": "Wag", "type": "Dog" }
{ "_id" : 2, "name" : "Fetch" }
{ "_id" : 3, "name" : "Scratch" }
{ "_id" : 4, "name" : "Bubbles" }
{ "_id" : 5, "name" : "Hop", "type": "Kangaroo" }

Teraz uruchommy mongoimport polecenie ponownie, ale tym razem w merge tryb:

mongoimport --db=PetHotel --collection=pets --mode=merge --file=pets2.json

Wyjście:

2021-01-03T10:32:33.596+1000	connected to: mongodb://localhost/
2021-01-03T10:32:33.607+1000	3 document(s) imported successfully. 0 document(s) failed to import.

Według danych wyjściowych zaimportowano 3 dokumenty.

Przyjrzyjmy się kolekcji.

db.pets.find()

Wynik:

{ "_id" : 1, "weight" : 40, "name" : "Wag", "type" : "Dog" }
{ "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 10 }
{ "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 5 }
{ "_id" : 4, "name" : "Bubbles", "type" : "Fish", "weight" : 3 }
{ "_id" : 5, "name" : "Hop", "type" : "Kangaroo" }

Widzimy, że dokumenty 1 i 2 zostały zaktualizowane, a dokument 5 został wstawiony. Jeśli chodzi o dokument 1, weight pole pozostało, mimo że dokument importu nie zawierał tego pola. Dzieje się tak, ponieważ użyliśmy merge tryb. Gdybyśmy użyli upsert tryb (jak w poprzednim przykładzie), weight pole zniknęłoby.

Tryb usuwania

Kiedy używasz delete w trybie, wszystkie pasujące dokumenty są po prostu usuwane. W kolekcji pozostają niepasujące dokumenty.

Zobaczmy więc, co się stanie, gdy zaimportujemy ten sam dokument, ale tym razem przełączmy się na delete tryb.

mongoimport --db=PetHotel --collection=pets --mode=delete --file=pets2.json

Wynik:

2021-01-03T10:39:38.925+1000	connected to: mongodb://localhost/
2021-01-03T10:39:38.926+1000	5 document(s) deleted successfully. 0 document(s) failed to delete.

Wszystkie 5 dokumentów z kolekcji zostało usuniętych.

Zmiana pól 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.

Nie jestem pewien, czy masz 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 uruchomić mongoimport Polecenia?

Musisz uruchomić mongoimport polecenia z wiersza poleceń systemu (np. nowe okno terminala lub wiersza polecenia).

Nie uruchamiaj ich z mongo powłoka.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Importuj plik CSV za pomocą schematu Mongoose

  2. Mongoose.js tworzy wiele połączeń do MongoDB z jednego wywołania connect()

  3. Używanie MongoDB $pull do usuwania dokumentów z tablicy

  4. Automatycznie generowane pole dla MongoDB przy użyciu Spring Boot

  5. Jak monitorować serwery baz danych za pomocą ClusterControl CLI