MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB $ reverseArray

Dans MongoDB, le $reverseArray l'opérateur de pipeline d'agrégation inverse l'ordre des éléments dans un tableau.

Il accepte une expression de tableau comme argument et renvoie un tableau avec les éléments dans l'ordre inverse.

Exemple

Supposons que nous ayons une collection appelée products avec les documents suivants :

{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "L" ] }
{ "_id" : 2, "prod" : "Hat", "sizes" : [ "XS", "S", "L", "XL" ] }
{ "_id" : 3, "prod" : "Cap", "sizes" : [ "M", "L" ] }

Nous pouvons utiliser le $reverseArray opérateur pour inverser l'ordre de ces éléments de tableau.

Exemple :

db.products.aggregate(
   [
     { $match: { _id: { $in: [ 1, 2, 3 ] } } },
     {
       $project:
          {
            _id: 0,
            sizes: 1,
            reversed: { $reverseArray: [ "$sizes" ] }
          }
     }
   ]
)

Résultat :

{ "sizes" : [ "S", "M", "L" ], "reversed" : [ "L", "M", "S" ] }
{ "sizes" : [ "XS", "S", "L", "XL" ], "reversed" : [ "XL", "L", "S", "XS" ] }
{ "sizes" : [ "M", "L" ], "reversed" : [ "L", "M" ] }

Tableaux vides

Passer un tableau vide renvoie un tableau vide.

Exemple de document :

{ "_id" : 4, "prod" : "Zap", "sizes" : [ ] }

Appliquer $reverseArray :

db.products.aggregate(
   [
     { $match: { _id: { $in: [ 4 ] } } },
     {
       $project:
          {
            _id: 0,
            sizes: 1,
            reversed: { $reverseArray: [ "$sizes" ] }
          }
     }
   ]
)

Résultat :

{ "sizes" : [ ], "reversed" : [ ] }

Valeurs nulles

Passer une valeur de null renvoie null .

Exemple de document :

{ "_id" : 5, "prod" : "Tap", "sizes" : null }

Appliquer $reverseArray :

db.products.aggregate(
   [
     { $match: { _id: { $in: [ 5 ] } } },
     {
       $project:
          {
            _id: 0,
            sizes: 1,
            reversed: { $reverseArray: [ "$sizes" ] }
          }
     }
   ]
)

Résultat :

{ "sizes" : null, "reversed" : null }

Champs manquants

Application de $reverseArray à un champ qui n'existe pas dans le document donne null être retourné.

Exemple de document :

{ "_id" : 6, "prod" : "Map" }

Appliquer $reverseArray :

db.products.aggregate(
   [
     { $match: { _id: { $in: [ 6 ] } } },
     {
       $project:
          {
            _id: 0,
            sizes: 1,
            reversed: { $reverseArray: [ "$sizes" ] }
          }
     }
   ]
)

Résultat :

{ "reversed" : null }

Type de données incorrect

Application de $reverseArray à un champ qui ne se résout pas en un tableau entraîne une erreur.

Exemple de document :

{ "_id" : 7, "prod" : "Box", "sizes" : "XXL" }

Appliquer $reverseArray :

db.products.aggregate(
   [
     { $match: { _id: { $in: [ 7 ] } } },
     {
       $project:
          {
            _id: 0,
            sizes: 1,
            reversed: { $reverseArray: [ "$sizes" ] }
          }
     }
   ]
)

Résultat :

uncaught exception: Error: command failed: {
	"ok" : 0,
	"errmsg" : "The argument to $reverseArray must be an array, but was of type: string",
	"code" : 34435,
	"codeName" : "Location34435"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:639:17
[email protected]/mongo/shell/assert.js:729:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1058:12
@(shell):1:1