MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB $arrayElemAt

In MongoDB ist das $arrayElemAt Der Aggregations-Pipeline-Operator gibt das Element am angegebenen Array-Index zurück.

Es akzeptiert zwei Argumente;

  • Das Array
  • Der Index des Elements, das Sie abrufen möchten

Beispiel

Angenommen, wir haben eine Sammlung namens posts mit folgendem Dokument:

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

In diesem Dokument sind die tags Feld enthält ein Array.

Wir können das $arrayElemAt verwenden Operator, um ein Array-Element an einem bestimmten Index zurückzugeben.

Beispiel:

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

Ergebnis:

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

In diesem Fall geben wir das erste Array-Element zurück. Arrays sind nullbasiert, also 0 bezieht sich auf das erste Element im Array.

Tipp:Ab MongoDB 4.4 können wir auch den $first verwenden Operator, um das erste Element in einem Array zurückzugeben.

Hier ist ein Beispiel für das Abrufen des zweiten Elements:

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

Ergebnis:

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

Negative Werte für den Index

Sie können für das zweite Argument einen negativen Wert angeben. Wenn Sie dies tun, $arrayElemAt zählt vom Ende des Arrays rückwärts.

Beispiel:

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

Ergebnis:

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

In diesem Fall erhalten wir das letzte Element im Array.

Ab MongoDB 4.4 können wir auch $last verwenden Operator, um das letzte Array-Element zu erhalten.

Kombination mit anderen Operatoren

Sie können $arrayElemAt verwenden mit anderen Operatoren, um die gewünschten Ergebnisse zu erzielen.

Hier ist ein Beispiel für die Kombination mit $binarySize Operator, um die Größe eines bestimmten Array-Elements zurückzugeben.

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

Ergebnis:

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