MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB $slice

W MongoDB $slice Operator potoku agregacji zwraca podzbiór tablicy.

Aby użyć $slice , określasz liczbę elementów do zwrócenia z tablicy. Możesz także określić pozycję początkową, dla której należy pobrać podzbiór z tablicy.

Przykład

Załóżmy, że mamy kolekcję o nazwie test z następującym dokumentem:

{ "_id" : 1, "data" : [ "Aardvark", "Buffalo", "Cat", "Dog", "Horse", "Gorilla", "Zebra" ] }

Możemy użyć $slice pobrać podzbiór z tablicy w data pole.

Dodatnia liczba całkowita

Dostarczenie pojedynczej wartości dodatniej określa pozycję początkową od początku tablicy.

db.test.aggregate(
   [
     {
       $project:
          {
            _id: 0,
            result: { $slice: [ "$data", 3 ] }
          }
     }
   ]
)

Wynik:

{ "result" : [ "Aardvark", "Buffalo", "Cat" ] }

W tym przypadku podaliśmy dodatnią liczbę 3 , a więc pierwsze trzy elementy zostały zwrócone z tablicy.

Ujemna liczba całkowita

Podanie pojedynczej wartości ujemnej określa pozycję początkową od koniec tablicy.

db.test.aggregate(
   [
     {
       $project:
          {
            _id: 0,
            result: { $slice: [ "$data", -3 ] }
          }
     }
   ]
)

Wynik:

{ "result" : [ "Horse", "Gorilla", "Zebra" ] }

W tym przypadku zwróciliśmy ostatnie trzy elementy z tablicy.

Pamiętaj, że nie możesz określić ujemnej liczby całkowitej, gdy określasz również pozycję początkową. Więcej na ten temat później.

Określ pozycję startową

Masz również możliwość określenia pozycji początkowej. Aby to zrobić, podaj kolejną liczbę całkowitą przed drugą.

Dodatnia liczba całkowita

Oto przykład użycia dodatniej liczby całkowitej dla pozycji początkowej:

db.test.aggregate(
   [
     {
       $project:
          {
            _id: 0,
            result: { $slice: [ "$data", 2, 3 ] }
          }
     }
   ]
)

Wynik:

{ "result" : [ "Cat", "Dog", "Horse" ] }

W tym przypadku określiliśmy pozycję początkową 2 i plasterek o rozmiarze 3 .

Zauważ, że tablice są liczone od zera, a zatem nasza dodatnia liczba całkowita 2 spowodowało, że operacja plastra rozpoczęła się od trzeciej pozycji.

Ujemna liczba całkowita

Oto przykład użycia ujemnej liczby całkowitej dla pozycji początkowej:

db.test.aggregate(
   [
     {
       $project:
          {
            _id: 0,
            result: { $slice: [ "$data", -4, 3 ] }
          }
     }
   ]
)

Wynik:

{ "result" : [ "Dog", "Horse", "Gorilla" ] }

W tym przypadku określiliśmy -4 , co skutkowało operacją plastra odliczającą cztery miejsca wstecz od końca.

Plasterki nadwymiarowe

Dostarczenie rozmiaru wycinka, który jest większy niż dostępne elementy w tablicy, powoduje zwrócenie tylko pozostałych elementów tablicy.

Przykład:

db.test.aggregate(
   [
     {
       $project:
          {
            _id: 0,
            result: { $slice: [ "$data", -1, 3 ] }
          }
     }
   ]
)

Wynik:

{ "result" : [ "Zebra" ] }

Tutaj określiliśmy, że powinny zostać zwrócone trzy elementy, mimo że rozpoczęliśmy tylko jedną pozycję wstecz od końca tablicy. W tym przypadku został zwrócony tylko jeden element (ostatni w tablicy).

Pozycja początkowa poza zasięgiem

Podanie pozycji początkowej, która jest poza zakresem tablicy, może zwrócić niektóre elementy lub pustą tablicę. Wszystko zależy od podanych wartości.

Oto przykład, który zwraca pustą tablicę:

db.test.aggregate(
   [
     {
       $project:
          {
            _id: 0,
            result: { $slice: [ "$data", 10, 3 ] }
          }
     }
   ]
)

Wynik:

{ "result" : [ ] }

Zwróciło to pustą tablicę, ponieważ pozycja początkowa to 10 , mimo że jest tylko 7 elementy w tablicy (a liczba wyszłaby od 0 do 6 ).

Jeśli jednak podamy wartość ujemną, która jest większa niż rozmiar tablicy, wycinek zaczyna się od początku tablicy.

Przykład:

db.test.aggregate(
   [
     {
       $project:
          {
            _id: 0,
            result: { $slice: [ "$data", -10, 3 ] }
          }
     }
   ]
)

Wynik:

{ "result" : [ "Aardvark", "Buffalo", "Cat" ] }

Ujemny plasterek z pozycją początkową

Jak wspomniano, nie możesz określić ujemnej liczby całkowitej, gdy określasz również pozycję początkową. Spowoduje to błąd.

Przykład:

db.test.aggregate(
   [
     {
       $project:
          {
            _id: 0,
            result: { $slice: [ "$data", 4, -3 ] }
          }
     }
   ]
)

Wynik:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "Third argument to $slice must be positive: -3",
	"code" : 28729,
	"codeName" : "Location28729"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:639:17
[email protected]/mongo/shell/assert.js:729:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1058:12
@(shell):1:1

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Najpopularniejsze bazy danych NoSQL obsługiwane przez ClusterControl

  2. Dołącz element do tablicy dokumentów MongoDB w PyMongo bez ponownego wstawiania

  3. MongoDB 'count()' działa bardzo wolno. Jak to udoskonalamy/obrabiamy?

  4. MongoDB C# Driver - Ignoruj ​​pola podczas wiązania

  5. Wyjaśnienie upsert MongoDB