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

$arrayElemAt . MongoDB

W MongoDB $arrayElemAt Operator potoku agregacji zwraca element o określonym indeksie tablicy.

Przyjmuje dwa argumenty;

  • Tablica
  • Indeks elementu, który chcesz pobrać

Przykład

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

{
	"_id" : 1,
	"title" : "Hello World!",
	"body" : "This is a test post for the purposes of testing",
	"tags" : [
		"html",
		"css",
		"sql",
		"xml"
	],
	"status" : null
}

W tym dokumencie tags pole zawiera tablicę.

Możemy użyć $arrayElemAt operator zwracający element tablicy pod określonym indeksem.

Przykład:

db.posts.aggregate([
  {
    $project: {
      "tag": { $arrayElemAt: [ "$tags", 0 ] }
    }
  }
])

Wynik:

{ "_id" : 1, "tag" : "html" }

W takim przypadku zwracamy pierwszy element tablicy. Tablice są liczone od zera, więc 0 odnosi się do pierwszego elementu w tablicy.

Wskazówka:z MongoDB 4.4 możemy również użyć $first operator zwracający pierwszy element tablicy.

Oto przykład pobierania drugiego elementu:

db.posts.aggregate([
  {
    $project: {
      "tag": { $arrayElemAt: [ "$tags", 1 ] }
    }
  }
])

Wynik:

{ "_id" : 1, "tag" : "css" }

Wartości ujemne dla indeksu

Możesz podać wartość ujemną dla drugiego argumentu. Kiedy to zrobisz, $arrayElemAt odlicza wstecz od końca tablicy.

Przykład:

db.posts.aggregate([
  {
    $project: {
      "tag": { $arrayElemAt: [ "$tags", -1 ] }
    }
  }
])

Wynik:

{ "_id" : 1, "tag" : "xml" }

W tym przypadku otrzymujemy ostatni element tablicy.

Od MongoDB 4.4 możemy również użyć $last operatora, aby uzyskać ostatni element tablicy.

Łączenie z innymi operatorami

Możesz użyć $arrayElemAt z innymi operatorami, aby uzyskać żądane wyniki.

Oto przykład połączenia go z $binarySize operator zwracający rozmiar określonego elementu tablicy.

db.posts.aggregate([
  {
    $project: {
      "tagsSize": { $binarySize: { $arrayElemAt: [ "$tags", 0 ] } }
    }
  }
])

Wynik:

{ "_id" : 1, "tagsSize" : 4 }

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:Jak sprawdzić, czy pole tablicy zawiera element?

  2. Kopia zapasowa MongoDB w postaci tekstowej, a nie binarnej do kontroli źródła

  3. Aktualizacja ścieżki „x” spowodowałaby konflikt w miejscu „x”

  4. mangusta wyjątkowa:prawda nie działa

  5. Zmień typ pola w agregacji mongoDB i czy $lookup używa indeksu na polach, czy nie?