Jak działa operator $ setoninsert w MongoDB
Operator $ setoninsert MongoDB wykonuje operacje aktualizacji (), które mają flagę upsert, która implikuje, że ta operacja wprowadza tylko dane. Aby rozpocząć działanie operatora $ setoninsert, musimy utworzyć kolekcję MongoDB. Tutaj zatytułowaliśmy kolekcję jako „Zakład Workersscollection” i wstawiliśmy kilka dokumentów w tej kolekcji. Aby wstawić dokumenty w „WorkerCollections”, wdrażane jest zapytanie insertmany MongoDB, które jednocześnie wprowadza masę dokumentu. Zapytanie o wiele wstawek dokumentów w „WorkersCollection” jest reprezentowane w następujący sposób:
db.Zakład dla pracowników.wstawka (
„ID”: 1,
„Nazwa”: „Bella”,
„Wiek”: 31,
„Wynagrodzenie”: 50000,
„Wysokość”: 6.5,
"Godziny pracy" :
„Dzień”: „8 godzin”,
„Night”: „5 godzin”
,
"Detale" :
„City”: „Newyork”,
„Telefon”: „0842888123”
,
„ID”: 2,
„Nazwa”: „Kevin”,
„Wiek”: 29,
„Wynagrodzenie”: 45000,
„Wysokość”: 5.9,
"Godziny pracy" :
„Dzień”: „6 godzin”,
„Night”: „3 godziny”
,
"Detale" :
„City”: „Houston”,
„Telefon”: „8329423099”
,
„ID”: 3,
„Nazwa”: „Steven”,
„Wiek”: 34,
„Wynagrodzenie”: 39000,
„Wysokość”: 6.4,
"Godziny pracy" :
„Dzień”: „9 godzin”,
„Night”: „2 godziny”
,
"Detale" :
„City”: „Kalifornia”,
„Telefon”: „812373002”
)
Gdy dokumenty w dostarczonej kolekcji zostaną pomyślnie wstawiane, na powładzie MongoDB uzyskano następujące dane wyjściowe:
Uznany: prawda,
InsertedId: ObjectID („63B56A6707E9102DCADCF96A”)
Przykład 1: Korzystanie z operatora $ setoninsert do wstawienia nowego dokumentu
Włożyliśmy już trzy dokumenty do kolekcji MongoDB, „WorkersCollection”. Teraz możemy dodać nowy dokument w tej samej kolekcji do $ setoninsert operator. Mamy następujące zapytanie, w którym używamy metody aktualizacji () do określenia wyrażenia „id”: 4 ”. Następnie stosujemy operator „$ setoninsert”, aby ustawić pola „wiek” i „wynagrodzenie” z nowymi wartościami, które nie istnieją w dokumencie. Następnie stosujemy flagę upsert z wartością „prawdziwą”. Po pierwsze, nowy dokument jest tworzony z „id”: 4. Następnie operator $ setoninsert przypisuje wartości do odpowiedniego pola nowego dokumentu.
db.Zakład dla pracowników.aktualizacja („id”: 4, $ setoninsert: „wiek”: 35, „pensja”: 40000, upsert: true);
Wykonanie poprzedniego zapytania Upsert zwraca dane wyjściowe, które pokazano przy następnej demonstracji. WriteSults ma opcję upsertedCount, która ma wartość „1”, co wskazuje, że dokument jest podwyższony w kolekcji.
Uznany: prawda,
InsertedId: ObjectID („63B56CCA378B59E68E0C4608”),
MatchedCount: 0,
ModifiedCount: 0,
upsertedCount: 1
Przykład 2: Korzystanie z operatora $ setoninsert do wstawienia nowych wbudowanych pól do nowego dokumentu
Operator $ setoninsert jest również używany do wbudowanego dokumentu. Możemy użyć operatora $ setoninsert z funkcją aktualizacji () i opcją upsert, która jest przypisana do true. Oto reprezentacja zapytania w celu wstawienia nowego wbudowanego dokumentu w naszym „Zakładowi robotniczym”. Zastosujemy metodę aktualizacji (), w której ustawiamy „Szczegóły.Miasto ”:„ Chicago ” Wyrażenie najpierw. Następnie stosujemy operator $ setoninsert, w którym wbudowane pola, „robocze.Dzień ”i„ robocze.Noc ”, są ustawione na nowe wartości. Opcja upsert jest również ustawiona z wartością prawdziwą do aktualizacji wbudowanego dokumentu.
db.Zakład dla pracowników.aktualizacja (”.Miasto „:„ Chicago ”,
$ setOninsert: „robotnicze.Dzień „:„ 5hrs ”,„ WorkingHours.Night ":" 5hrs ", upsert: true)
Pismo w następującym wyjściu wskazuje, że upsertedCount wynosi 1, co oznacza, że poprzednia operacja się powiodła.
Uznany: prawda,
InsertedId: ObjectID („63B584D4378B59E68E0C4B36”),
MatchedCount: 0,
ModifiedCount: 0,
upsertedCount: 1
Przykład 3: Korzystanie z operatora $ setoninsert do aktualizacji dokumentu
Jest inny przypadek $ setoninsert operatora MongoDB. Wcześniejsze przykłady wykorzystały operator $ setoninsert do wstawienia nowego dokumentu. Teraz, w tym przypadku MongoDB, używamy operatora $ setoninsert do aktualizacji dokumentu, który jest już obecny w kolekcji „WorkersCollection”. Tutaj mamy zapytanie o aktualizację (), które ustawia warunek, który aktualizuje dokument, którego wartość pola „id” to „2”. Po dopasowaniu dokumentu następna operacja jest realizowana tam, gdzie używamy operatorów $ set i $ setoninsert. Operator $ set jest określony z wartością w stosunku do pól „wiek” i „wysokości”. Następnie operator $ setoninsert jest wdrażany, aby wstawić pole nazwy z wartością „Carle” w istniejącym dokumencie. W końcu przypisujemy prawdziwą wartość do opcji Upsert do obsługi.
db.Zakład dla pracowników.aktualizacja(
„id”: 2,
$ set: wiek: 40, wysokość: 5.7,
$ setoninsert: nazwa: „Carle”
,
Upsert: true
)
Dokument jest pomyślnie zaktualizowany, a następujące dane wyjściowe jest pokazane z wartością opcji upsertCount, która jest ustawiona na true:
Uznany: prawda,
Wstawka: 2,
MatchedCount: 0,
ModifiedCount: 0,
upsertedCount: 1
Przykład 4: Korzystanie z operatora $ setoninsert do aktualizacji dokumentu bez operacji Upsert
Następnie mamy przypadek operatora $ setoninsert, w którym dokument jest dopasowany i modyfikowany, ale nie ma wyników upsertowych. Zapewniamy zapytanie, w którym aktualizujemy dokument za pomocą metody aktualizacji (). Metoda aktualizacji () jest dalej zaimplementowana z operacją, w której wyrażenie jest przypisane najpierw, a pole „id” ma wartość „1”. Następnie wywołujemy operator $ set, aby zmodyfikować określone pola i operator $ setoninsert, aby ustawić pole „Nazwa” z nową wartością, jaką jest „Alex”. Wartość prawdziwej Upsert jest przypisana po operatorze $ setoninsert.
db.Zakład dla pracowników.aktualizacja(
id: 1,
$ set: pensja: 60000, wysokość: 4.98,
$ setoninsert: nazwa: „Alex”
,
Upsert: true
)
Widzimy, że dopasowane i modyfikowane kolacje są ustawione na wartość „1”. UpsertCount ma wartość „zero”, która wskazuje, że operacja upsert nie jest wykonywana, a nazwa „pola” nie jest aktualizowana.
Uznany: prawda,
Wstawka: NULL,
MatchedCount: 1,
ModifiedCount: 1,
upsertedCount: 0
Przykład 5: Korzystanie z operatora $ setoninsert dla dopasowanego dokumentu
Dalej jest działanie operatora $ setoninsert, aby sprawdzić, czy ten operator działa poprawnie za pomocą dopasowanego dokumentu. Operator $ setoninsert jest nieskuteczny w przypadku już istniejących dokumentów. Miejmy następujące zapytanie, w którym mamy operator $ setoninsert w metodzie aktualizacji (). Operator $ setoninsert ustawia osadzone pola, „miasto” i „telefon”, z wartością, która jest już obecna w dokumencie. Tutaj operacja upsert po prostu ignoruje operatora $ setoninsert, ponieważ określone wartości są już umieszczone w dokumencie.
db.Zakład dla pracowników.aktualizacja („name”: „Kevin”,
$ setoninsert: ”.Miasto „:„ Houston ”,
"Detale.Telefon „:„ 8329423099 ”,
UpSert: true)
Wyniki właśnie potwierdziły dopasowany dokument. Operacja Upsert nie powiodła się w tym przypadku, jak pokazano w następujący sposób:
Uznany: prawda,
Wstawka: NULL,
MatchedCount: 1,
ModifiedCount: 0,
upsertedCount: 0
Wniosek
Wykazaliśmy o operatoru MongoDB $ SetonInsert. Nauczyliśmy się, jak korzystać z tego operatora z zapytaniami MongoDB. Operator $ setoninsert jest stosowany w metodzie aktualizacji (), aby zwiększyć nowy lub określony dokument. Możliwa ilustracja przypadków znajduje się w tym artykule, w którym wstawiliśmy nowy dokument i nowy dokument osadzony za pomocą operatora $ setoninsert. Następnie zadzwoniliśmy do operatora $ setoninsert, aby zaktualizować już obecny dokument i dopasowany dokument.