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

Jak zastąpić istniejące dokumenty podczas importowania pliku do MongoDB

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.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Sposoby implementacji wersjonowania danych w MongoDB

  2. Czy mogę wykonać zapytanie tekstowe za pomocą sterownika mongodb c#?

  3. Jak zagregować sumę w MongoDB, aby uzyskać całkowitą liczbę?

  4. Słaba wydajność agregacji wyszukiwania

  5. Jaki jest maksymalny rozmiar operacji wsadowej MongoDB?