sql >> Database >  >> NoSQL >> MongoDB

MongoDB $arrayElemAt

In MongoDB is de $arrayElemAt aggregatiepijplijnoperator retourneert het element met de opgegeven array-index.

Het accepteert twee argumenten;

  • De array
  • De index van het element dat u wilt ophalen

Voorbeeld

Stel dat we een verzameling hebben met de naam posts met het volgende document:

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

In dit document worden de tags veld bevat een array.

We kunnen de $arrayElemAt . gebruiken operator om een ​​array-element op een specifieke index te retourneren.

Voorbeeld:

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

Resultaat:

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

In dit geval retourneren we het eerste array-element. Arrays zijn gebaseerd op nul, en dus 0 verwijst naar het eerste element in de array.

Tip:vanaf MongoDB 4.4 kunnen we ook de $first . gebruiken operator om het eerste element in een array te retourneren.

Hier is een voorbeeld van het verkrijgen van het tweede element:

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

Resultaat:

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

Negatieve waarden voor de index

U kunt een negatieve waarde opgeven voor het tweede argument. Wanneer u dit doet, $arrayElemAt telt achteruit vanaf het einde van de array.

Voorbeeld:

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

Resultaat:

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

In dit geval krijgen we het laatste element in de array.

Vanaf MongoDB 4.4 kunnen we ook de $last . gebruiken operator om het laatste array-element te krijgen.

Combineren met andere operators

U kunt $arrayElemAt . gebruiken met andere operators om de gewenste resultaten te produceren.

Hier is een voorbeeld van het combineren met de $binarySize operator om de grootte van een specifiek array-element te retourneren.

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

Resultaat:

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

  1. Hoe krijg ik een specifiek ingesloten document in een MongoDB-verzameling?

  2. Mongo Triple Samengestelde Index

  3. Ingesloten MongoDB bij het uitvoeren van integratietests

  4. Mongoose / MongoDB $addToSet-functionaliteit gebruiken op een reeks objecten