Dokumenty są przekazywane do rurociągu z wieloma operatorami, takimi jak $ Match i $, aby agregować dane. Operator wyszukiwania $ jest jednym z operatorów rurociągu agregacji, który pozwala na połączenie danych z kolekcją wejściową. Operator wyszukiwania MongoDB używa lewej zewnętrznej operacji połączenia, aby połączyć dane z jednego dokumentu do drugiego. Krótko mówiąc, metoda $ Lookup pozwala nam łatwo „dołączyć” do różnych kolekcji, podając wyniki zawierające pola ze wszystkich danych kolekcji. Główną zaletą operatora wyszukiwania MongoDB $ jest to, że obsługuje dane na serwerze, które są znacznie szybsze niż uruchamianie kilku zapytań DB i analizowanie wyników ze strony klienta. W tym artykule omówimy o zasadzie operacyjnej MongoDB $.
Jak działa operator wyszukiwania MongoDB $?
Jak wspomniano, operator $ Lookup w MongoDB pozwala nam połączyć dokumenty z różnych kolekcji w tej samej bazie danych. Operator $ Lookup obsługuje niepowiązane nasilacze, a także dopasowania równości. Każdy dopasowanie do operatora $ Lookup ma inną strukturę, w której przyjrzymy się przy przykładowej implementacji. Ustanawiamy kolekcję „kandydatów”, której używamy w naszym przykładzie, aby wykonać operator $ Lookup. Tutaj wstawiamy dwa dokumenty metodą INSERTMANY (), która zawiera następujące pola:
db.Kandydaci.wstrząs
[[[
Candidate_id: 01,
„Nazwa”: „Andrew”,
„Rollnumber”: 099912,
„Test”: „MBBS”,
„AcademicStatus”: [„Schoolmarks”: „A”, „CollegeDeS”: „B”],
„Status”: „Kwalifikowany”
,
Candidate_id: 02,
„Nazwa”: „Stella”,
„Rollnumber”: 0012123,
„Test”: „BDS”,
„AcademicStatus”: [„Schoolgrades”: „A+”, „CollegeDeS”: „A”],
„Status”: „Kwalifikowany”
]
);
Wstawione wyniki zapytania powinny wyglądać w ten sposób w kolekcji MongoDB:
Następnie budujemy inną kolekcję, która jest zatytułowana „CandidateInfo”. Wkładamy dokument do tej kolekcji, wykorzystując metodę InsertMany ().
db.CandidateInfo.wstrząs
[[[
„Candidate_name”: „Andrew”,
„Wiek”: 27,
"Płeć męska",
„Test”: „MBBS”,
„City”: „Kalifornia”
,
„Candidate_name”: „Stella”,
„Wiek”: 25,
"Płeć żeńska",
„Test”: „BDS”,
„City”: „Houston”
]
);
Wyniki dodania dokumentu do kolekcji „CandidateInfo” wskazują, że dokumenty są odpowiednio wstawiane. Teraz możemy użyć obu tych kolekcji, aby połączyć się z operatorem $ Lookup.
Przykład 1: Korzystanie z operatora wyszukiwania MongoDB $ do dopasowania równości
Operator $ Lookup MongoDB jest stosowany w tym przykładzie, aby połączyć operacje w klawiszu z danej bazy danych i połączonej bazy danych. Tutaj określamy zapytanie o równość w kolekcji „kandydata” za pomocą metody agregate (). Metoda agregate () jest dalej wdrażana z operatorem $ Lookup. Operator wyszukiwania $ zawiera różne ograniczenia, które wszystkie są wymagane do połączenia danej kolekcji.
Pierwszym wdrożonym ograniczeniem jest ograniczenie „od”, które przypisuje się nazwę kolekcji „CandidateInfo”, do którego należy dołączyć. Następnie ustawiamy ograniczenie „Localfield”, w którym przypisana jest nazwa pola „Nazwa” z dokumentu danego zbioru. Lokalne pole jest zdefiniowane jako pole w kolekcji lokalnej, która ma zostać połączona. Następnie definiujemy atrybut zagranicznego pola, który jest określony w polu „Candidate_name” z kolekcji „CandidateInfo”, aby połączyć się z kolekcją „kandydata”. Następnie ograniczenie „AS” służy do generowania tablicy dopasowanych wyników operatora $ Lookup.
db.Kandydaci.agregat([
$ Lookup:
Od: „CandidateInfo”,
Localfield: „Nazwa”,
Pole zagraniczne: „Candidate_name”,
jako: „kandydatinfo”
])
Wyjście zapytania $ Lookup łączy mecze z kolekcji „CandidateInfo” z kolekcją „kandydatów” przy użyciu wartości pola „Nazwa” i „Candidate_name” odpowiednio w kolekcjach „kandydatów” i „kandydatów”.
Przykład 2: Korzystanie z operatora wyszukiwania MongoDB $ z kryteriami wyboru
Mecz równości kolekcji jest osiągnięty w poprzednim przykładzie. Teraz używamy operatora $ Lookup z operatorem warunkowym, aby dołączyć do kolekcji. Podajemy zapytanie $ Lookup Operator w metodzie agregacji w kolekcji „CandidateInfo”. Wewnątrz metody Agregate () mamy operator $ Lookup, który jest określony z różnymi ograniczeniami, aby dołączyć do kolekcji.
Po pierwsze, definiujemy ograniczenie „od”, które jest zdefiniowane z inną kolekcją, która jest „kandydatami”. Zauważ, że używamy ograniczeń „Let” i „Rurociągu” po ograniczeniu „od” zamiast pola lokalnego i pola zagranicznego. Ograniczenie „niech” jest zadeklarowane za pomocą zmiennej „C_AGE”, która jest przypisana do pola „$ wiek”. Zmienna „C_TEST” jest zadeklarowana, która zawiera nazwę pola „$ test”. Zadeklarujemy te zmienne w celu odzyskania pól z dokumentów w połączonej kolekcji, które są przekazywane do rurociągu.
Następnie tworzymy atrybut „rurociągu”, w którym wprowadzają operatory warunkowe. Zastosowanie ograniczenia rurociągu polega na uruchomieniu operacji łączenia nad daną kolekcją. Następnie rurociąg jest powiązany z etapem $ mecz, który dodatkowo ustawia etap $ expr. Etap $ expr porównuje pola przy użyciu zmiennych wejściowych w atrybucie „Let”. Etap $ expr jest zadeklarowany z $ i operatorem, w którym podajemy „$ lt: [„ $ wiek ”,„ $$ c_age ”]” i $ eq: [„$$ c_test”, „$ test” ] Wyrażenia. Możemy porównać kolekcję tylko w ten sposób dla $ Lookup Operator. Wyrażenia są określone za pomocą znaku podwójnego dolara „$$” w odniesieniu do zmiennych zdefiniowanych w ograniczeniu „Let”, a znak pojedynczego dolara „$” wskazuje na pole zagraniczne. Atrybut rurociągu jest następnie zamykany. Na koniec definiujemy atrybut „jako” operatora $ Lookup, aby podać kolekcję „kandydatów” do połączenia z kolekcją „CandidateInfo”.
db.CandidateInfo.agregat([
$ Lookup:
Od: „kandydat”,
let: c_age: „$ wiek”, c_test: „$ test”,
Rurociąg: [
$ mecz:
$ expr:
$ i:
[[[
$ lt: [„$ wiek”, „$$ c_age”],
$ eq: [„$$ c_test”, „$ test”]
]
],
Jak: „kandydaci”
]).ładny();
Następujące dane wyjściowe uzyskuje się poprzez wykonanie rurociągu operatora $ z kryteriami wyboru:
Przykład 3: Korzystanie z operatora wyszukiwania MongoDB $ z operatorem $ mergeObject
Obiekty $ scerge służą do zmiany dokumentów w danej kolekcji, które zależą od ograniczeń ustawionych w $ Lookup Oeprator. Tutaj najpierw ustawiliśmy operator $ Lookup z jego ograniczeniami. Następnie nazywamy $ mergeObject, który ustawia również ograniczenie do wykonania zmodyfikowanej kolekcji, które są zwracane z $ Lookup Operator. W poniższym zapytaniu operator $ Lookup służy do dołączenia do kolekcji „kandydata” z „kandydującegoinfo”, wykorzystując pole Localfield i Foreignfield jako „test”. Następnie stosujemy etap $ zamiennik, który wywołuje $ mergeObjects do łączenia dokumentów z kolekcji „kandydatów” i „kandydatów”.
db.Kandydaci.agregować ([
$ Lookup:
Od: „CandidateInfo”,
Localfield: „Test”,
pole zagraniczne: „Test”,
Jak: „fromcandi”
,
$ zamiennik: newroot: $ mergeObjects: [$ arrayeLeMat: ["$ fromCandi", 0], „$$ root”]
,
$ projekt: „fromCandi”: 0
])
Po zapytaniu tej operacji wyszukiwania $ z $ mergeObject, mamy następujące wyniki:
Wniosek
Operator wyszukiwania $ pomaga w zidentyfikowaniu odpowiednich danych i zdobyciu pożądanych wyników. Wdrożyliśmy trzy przykłady za pomocą operatora $ Lookup. W pierwszym przykładzie wykorzystaliśmy operatora $ Lookup do dopasowywania równości. Następnie mamy przykład, w którym warunki są używane do wykonywania wyników operatora wyszukiwania. Użyliśmy również etapu $ MERGEOBjects z operatorem $ Lookup, aby modyfikować dokumenty.