sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB $arrayElemAt

I MongoDB er $arrayElemAt aggregeringspipeline-operator returnerer elementet ved det angivne array-indeks.

Den accepterer to argumenter;

  • Arrayet
  • Indekset for det element, du vil hente

Eksempel

Antag, at vi har en samling kaldet posts med følgende dokument:

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

I dette dokument er tags felt indeholder en matrix.

Vi kan bruge $arrayElemAt operator for at returnere et array-element ved et specifikt indeks.

Eksempel:

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

Resultat:

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

I dette tilfælde returnerer vi det første array-element. Arrays er nul-baserede, og derfor 0 henviser til det første element i arrayet.

Tip:Fra MongoDB 4.4 kan vi også bruge $first operator for at returnere det første element i et array.

Her er et eksempel på at få det andet element:

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

Resultat:

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

Negative værdier for indekset

Du kan angive en negativ værdi for det andet argument. Når du gør dette, $arrayElemAt tæller baglæns fra slutningen af ​​arrayet.

Eksempel:

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

Resultat:

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

I dette tilfælde får vi det sidste element i arrayet.

Fra MongoDB 4.4 kan vi også bruge $last operator for at hente det sidste array-element.

Kombinering med andre operatører

Du kan bruge $arrayElemAt med andre operatører for at opnå de resultater, du har brug for.

Her er et eksempel på at kombinere det med $binarySize operator for at returnere størrelsen af ​​et specifikt array-element.

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

Resultat:

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

  1. Diagnosticerer uventet redis-serverfejl

  2. Hvordan sender man data mellem flere Lua State (multi-thread)?

  3. Sådan konfigurerer du Yii2 med Redis-konfiguration

  4. Meteor Subscribe opdaterer ikke sorteringsrækkefølgen for samlingen