Od mongoimport
w wersji 100.0.0 można usuwać dokumenty w MongoDB na podstawie zaimportowanego pliku. Aby to zrobić, użyj delete
tryb.
Kiedy używasz delete
tryb, jeśli importowany dokument ma ten sam _id
jako istniejący w kolekcji, do której importujesz, istniejący dokument zostanie usunięty.
Możesz także określić inne pole lub pola (inne niż _id
pole) jako pasujące pole, jeśli jest to wymagane.
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 } { "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 } { "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }
I mamy następujący plik JSON o nazwie pets.json
:
{"_id":1,"name":"Wag","type":"Dog"} {"_id":2,"name":"Fluffy","type":"Cat","weight":10} {"_id":9,"name":"Hop","type":"Kangaroo","weight":60}
Poniższe polecenie importuje plik JSON za pomocą delete
tryb:
mongoimport --db=PetHotel --collection=pets --mode=delete --file=data/pets.json
Uruchomienie tego polecenia spowoduje usunięcie wszystkich pasujących dokumentów z kolekcji.
Sprawdź wyniki
Przyjrzyjmy się teraz kolekcji.
db.pets.find()
Wynik:
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 } { "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 } { "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }
Widzimy, że pierwsze 2 dokumenty zostały usunięte. Zostały usunięte, ponieważ ich _id
wartości pasowały do _id
wartości w istniejących dokumentach. Dzieje się tak pomimo innych szczegółów, które niekoniecznie pasują (takich jak dokument 2).
Ponadto nasz importowany plik zawierał dokument z _id
z 9, ale nie było pasującego dokumentu, więc nic dla tego nie zostało usunięte.
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 wielu pól z tym parametrem, przekaż je jako listę oddzieloną przecinkami.
Załóżmy, że mamy inny plik JSON o nazwie pets2.json
i wygląda to tak:
{ "name" : "Meow", "type" : "Cat", "weight" : 7 } { "name" : "Bubbles", "type" : "Fish", "weight" : 3 }
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=delete --upsertFields=name,type --file=data/pets2.json
Teraz ponownie sprawdźmy kolekcję:
db.pets.find()
Wynik:
{ "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 } { "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }
Kot Miau został usunięty, ponieważ zwierzę istniało zarówno w kolekcji MongoDB, jak i w importowanym dokumencie.
Ryba Bubbles nie miała pasującego dokumentu, więc nic nie zostało usunięte z tego.
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.