MongoDB $ setoninsert operator

MongoDB $ setoninsert operator
Metoda aktualizacji () MongoDB zapewnia kilku operatorom aktualizację wartości dokumentu. Od tych operatorów zbadamy operator $ setoninsert. Operator $ setoninsert w MongoDB wykonuje operację wkładki i aktualizacji, gdy flaga Upsert jest stosowana z funkcją aktualizacji (). Gdy opcja upsert jest określona z wartością prawdziwą i wkłada dokument, tylko operator $ setoninsert wstawia pole podczas pracy aktualizacji. Operator $ setoninsert nie ma wpływu na przypadek, w którym funkcja nie dodaje dokumentu.

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.