sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB $arrayElemAt

I MongoDB, $arrayElemAt aggregeringspipeline-operatorn returnerar elementet vid det angivna arrayindexet.

Den godtar två argument;

  • Arrayen
  • Indexet för elementet du vill hämta

Exempel

Anta att vi har en samling som heter posts med följande 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 det här dokumentet, tags fältet innehåller en array.

Vi kan använda $arrayElemAt operator för att returnera ett matriselement vid ett specifikt index.

Exempel:

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

Resultat:

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

I det här fallet returnerar vi det första arrayelementet. Arrayer är nollbaserade, och så 0 refererar till det första elementet i arrayen.

Tips:Från MongoDB 4.4 kan vi också använda $first operatorn för att returnera det första elementet i en array.

Här är ett exempel på att få det andra elementet:

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

Resultat:

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

Negativa värden för indexet

Du kan ange ett negativt värde för det andra argumentet. När du gör detta, $arrayElemAt räknar baklänges från slutet av arrayen.

Exempel:

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

Resultat:

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

I det här fallet får vi det sista elementet i arrayen.

Från MongoDB 4.4 kan vi också använda $last operatorn för att hämta det sista matriselementet.

Kombinera med andra operatörer

Du kan använda $arrayElemAt med andra operatörer för att få de resultat du behöver.

Här är ett exempel på att kombinera det med $binarySize operatorn för att returnera storleken på ett specifikt arrayelement.

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

Resultat:

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

  1. Skapa ett 2dsphere Geospatial Index för sfäriska frågor i MongoDB

  2. Vad är det mest effektiva kommunikationsbiblioteket/metoden för node.js mellan processer?

  3. MongoDB distinkt kommando

  4. Hur man filtrerar array i underdokument med MongoDB