Zakres MongoDB $

Zakres MongoDB $
Operator Range MongoDB $ to niestandardowy operator, który generuje tablicę liczb na podstawie danej wartości rozpoczęcia, wartości końcowej i wartości kroku. Ten operator jest przydatnym narzędziem do generowania sekwencji liczb do użycia w manipulacji danych lub analizie. Jest zwykle używany jako element operatora projektu $ w agregatowym rurociągu, aby utworzyć nowe pole w dokumentach wyjściowych, które zawierają szereg liczb. Wymaga łącznie trzech argumentów: wartość początkowa, nazwa pola, na którym zostanie zastosowana pole zakres. Ten przewodnik wyjaśni i zademonstruje użycie operatora „zasięgu” MongoDB za pomocą niektórych przykładów.

Przykład nr 01:

Upewnij się, że Twoja baza danych MongoDB jest już skonfigurowana na twoim komputerze. Jeśli nie, spróbuj zainstalować go wraz z tworzeniem w nim kolekcji. Kolekcja musi mieć rekordy. Skonfigurowaliśmy naszą bazę danych MongoDB, tworząc kolekcję o nazwie „Manekin” i dodaliśmy do niej kilka dokumentów. Nadszedł czas, aby użyć operatora zasięgu w manekinie. Wcześniej będziemy wyświetlać dokumenty, które mamy w naszej kolekcji fikcji. Instrukcja pokazana poniżej jest wykonywana w tym celu w powładzie MongoDB. Polecenie używa metody „Find ()” do wyszukiwania wszystkich dokumentów w kolekcji o nazwie „Manekin” z pustymi klamrami „”. Nie są używane konkretne kryteria wyszukiwania, więc wszystkie rekordy w kolekcji „manekina” zostaną wyświetlone.

Dane wyjściowe polecenia to tablica dokumentów, każdy rekord zawierający kilka pól. Pola zawierają unikalne „_id” każdego rekordu, pole miasta reprezentuje nazwę miasta, pole liczby reprezentuje liczbę, pole DESC reprezentuje ciąg opisujący miasto, a pole losowe reprezentuje losową wartość numeryczną.

Test> db.Atrapa.znajdować()
[_id: ObjectID („63C8A1F94FF07039AA6CDF6B”), City: „Texas”, Count: 3, DESC: „MILDIZES MITY”, Random: 81,
_ID: ObjectID („63C8A1F94FF07039AA6CDF6C”), City: „Los Angeles”, Count: 3, DESC: „Miasto średniej wielkości”, losowe: 5,
_ID: ObjectID („63C8A1F94FF07039AA6CDF6D”), City: „Włochy”, Count: 10, desc: „Najpiękniejszy i zatłoczony”, losowo: 12,
_id: ObjectID („63C8A1F94FF07039AA6CDF6E”), City: „Istambul”, Count: 3, DESC: „Miasto średniej wielkości”, losowe: 95,
_ID: ObjectId („63C8A1F94FF07039AA6CDF6F”), City: „Delhi”, Count: 3, DESC: „Miasto średnio rozmiar”, Random: 22]

Nadszedł czas, aby zastosować pole „Zakres” na wszystkich zapisach kolekcji „manekina” MongoDB, aby uzyskać zakres liczb. Polecenie do zastosowania operatora zasięgu zostało dołączone pod spodem. Używa metody „agregate ()” do wykonywania agregatów w kolekcji o nazwie „Manekin”. Operator „$ Project” służy do przekształcenia dokumentów w kolekcji poprzez włączenie lub wykluczenie pól, a także może tworzyć nowe pola. W takim przypadku operator „$ Project” jest używany do utworzenia nowego pola o nazwie „REST”, który jest tablicą zawierającą zakres liczb od 0 do wartości pola „losowego” w każdym dokumencie, zwiększając o 10. Wyjście polecenia pokazuje tablicę rekordów, pole odpoczynku reprezentuje nową tablicę zawierającą zakres liczb oparty na wartości pola „losowego” oraz pola „miasta” o nazwie określonego miasta. Punkt odpoczynku można odgadnąć z zakresu dostarczonego w polu tablicy „odpoczynku”.

Test> db.Atrapa.Aggregate ([$ projekt: miasto: 1, „rest”: $ range: [0, „$ losy”, 10]])))))
[_id: ObjectID („63C8A1F94FF07039AA6CDF6B”), City: „Texas”, REST: [0, 10, 20, 30, 40, 50, 60, 70, 80],
_id: ObjectId („63C8A1F94FF07039AA6CDF6C”), City: „Los Angeles”, REST: [0],
_id: ObjectID („63C8A1F94FF07039AA6CDF6D”), City: „Włochy”, REST: [0, 10],
_ID: ObjectID („63C8A1F94FF07039AA6CDF6E”), City: „Stambul”, REST: [0, 10, 20, 30, 40, 50, 60, 70, 80, 90],
_id: ObjectID („63C8A1F94FF07039AA6CDF6F”), City: „Delhi”, Rest: [0, 10, 20]]

Przykład nr 02:

Rzućmy okiem na inny przykład, aby użyć pola zasięgu w kolekcji MongoDB. W tym przykładzie wykorzystano do tej pory „Test” kolekcji. Poniższa instrukcja „Znajdź” wyświetlała zawartość tej kolekcji. Dane wyjściowe polecenia zawiera unikalny identyfikator przypisany do każdego dokumentu przez MongoDB, pole „S” reprezentuje numer punktu początkowego, a pole „E” reprezentuje numer punktu końcowego.

Test> db.Test.znajdować()
[_ID: ObjectID („63CB65F0BEF5ADFC81DF628E”), S: 2, E: 8,
_ID: ObjectID („63CB65F0BEF5ADFC81DF628F”), S: 1, E: 5,
_ID: ObjectID („63CB65F0BEF5ADFC81DF6290”), S: 4, E: 9]

Wyjście pokazuje, że tablica jest tworzona za pomocą operatora $ Range, który przyjmuje dwa argumenty: wartość początkowa i wartość końcowa. Wartością początkową jest pole „s”, a wartością końcową jest pole „e” w dokumencie. Ostateczne wyjście tego polecenia to lista dokumentów, każdy z _id, pole „S”, pole „E” i pole „R”, które zawiera szereg liczb całkowitych. Liczby całkowite w polu „R” to zakres liczb między pól „S” i „E” dla każdego dokumentu: każdy z przyrostem 1. Dzieje się tak, ponieważ nie przypisaliśmy wartości przyrostu dla operatora zasięgu. Tak więc operator „zakresu” wziął „1” jako wartość przyrostową samą.

Test> db.Test.agregate ([$ projekt: s: 1, e: 1, „r”: $ range: [„$ s”, „$ e”]])))))
[_id: ObjectID („63CB65F0BEF5ADFC81DF628E”), S: 2, E: 8, R: [2, 3, 4, 5, 6, 7],
_ID: ObjectID („63CB65F0BEF5ADFC81DF628F”), S: 1, E: 5, R: [1, 2, 3, 4],
_ID: ObjectID („63CB65F0BEF5ADFC81DF6290”), S: 4, E: 9, R: [4, 5, 6, 7, 8]]

Przykład nr 03:

We wszystkich powyższych ilustracjach zastosowaliśmy operator zasięgu tylko na polach kolekcji o wartościach całkowitych. Otrzymamy błąd, gdy zastosujemy operator zakresu w wartości typu ciągów. Co jeśli zastosujemy go do wartości pola typu dziesiętnego? Sprawdźmy to, stosując go do nowej kolekcji o nazwie „Float” w naszej bazie danych MongoDB. Funkcja Find () zastosowana do kolekcji „Float” pokazuje 5 zestawów dokumentów w niej. Każdy dokument zawiera unikalny identyfikator, pole „Tytuł” ​​typu ciągów i „wiek” typu „wiek” zawierający wartości punktów dziesiętnych.

Test> db.Platforma.znajdować()
[_id: ObjectID („63CB5F26BEF5ADFC81DF6289”), tytuł: „Nina”, wiek: 45.6,
_id: ObjectID („63CB5F26BEF5ADFC81DF628A”), tytuł: „Ana”, wiek: 22.75,
_ID: ObjectID („63CB5F26BEF5ADFC81DF628B”), tytuł: „Eden”, wiek: 35.9,
_id: ObjectID („63CB5F26BEF5ADFC81DF628C”), tytuł: „Rock”, wiek: 82.5,
_ID: ObjectId („63CB5F26BEF5ADFC81DF628D”), tytuł: „Lia”, wiek: 27]

Teraz zastosowaliśmy operator „Zakres” do kolekcji pływaków za pomocą funkcji agregatów, aby uzyskać zakres liczb z przyrostem 11 dla pola „wiek”. Ten kod generuje jednak błąd, ponieważ operator $ Range wymaga, aby wartość końcowa jest 32-bitową liczbą całkowitą, ale wartość pola „Wiek” jest liczbą punktu zmiennoprzecinkowego i nie można go przekonwertować na 32- Bit Integer. To pokazuje, że nie możemy zastosować operatora zakresu w żadnym innym typu danych, z wyjątkiem typu danych liczb całkowitych w bazie danych MongoDB.

Test> db.Platforma.Aggregate ([$ projekt: tytuł: 1, „REST”: $ Range: [0, „$ wiek”, 11]]))))

MongoServererror: Błąd planExecutor podczas agregacji :: spowodowany przez :: $ Zakres wymaga wartości końcowej, która może być reprezentowana jako 32-bitowa liczba całkowita, znaleziona wartość: 45.6.

Wniosek

Poinformowaliśmy koncepcję wykorzystywania operatora zasięgu w funkcji agregatu MongoDB. Po zdefiniowaniu użycia operatora zasięgu wyjaśniliśmy jego użycie za pomocą trzech odrębnych przykładów poleceń MongoDB w skorupce. Pierwsza ilustracja pokazuje zastosowanie operatora zasięgu w polu typu liczb całkowitych, aby uzyskać sekwencję liczb z określonym numerem przyrostu. Druga ilustracje pokazują, w jaki sposób operator zasięgu można zastosować do pola Start i End bez użycia numeru przyrostu. Podczas gdy ostatni przykład pokazuje, że operator zasięgu nie działa na typach danych innych niż liczby całkowite: pływaki i struny.