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

MongoDB $concatArrays

Dans MongoDB, les $concatArrays L'opérateur de pipeline d'agrégation concatène deux tableaux ou plus et renvoie le tableau concaténé.

Exemple

Supposons que nous ayons une collection appelée data avec le document suivant :

{ "_id" : 1, "a" : [ 1, 2, 3 ], "b" : [ 4, 5, 6 ] }

Nous pouvons utiliser les $concatArrays opérateur pour concaténer le tableau du a champ avec le tableau du b champ :

db.data.aggregate([
    { $match: { _id: 1 } },
    { $project: { 
        _id: 0,
        result: { $concatArrays: [ "$a", "$b" ] }
        }
    }
])

Résultat :

{ "result" : [ 1, 2, 3, 4, 5, 6 ] }

Tableaux vides

Concaténer un tableau avec un tableau vide ne change rien.

Supposons que notre collection contienne également le document suivant :

{ "_id" : 2, "a" : [ 1, 2, 3 ], "b" : [ ] }

Appliquons $concatArrays à cela ::

db.data.aggregate([
    { $match: { _id: 2 } },
    { $project: { 
        _id: 0,
        result: { $concatArrays: [ "$a", "$b" ] }
        }
    }
])

Résultat :

{ "result" : [ 1, 2, 3 ] }

Nous nous retrouvons avec le premier tableau sans aucun changement.

Champs manquants

Essayer de concaténer un champ avec un champ qui n'existe pas renvoie null .

Imaginez que notre collection contienne également le document suivant :

{ "_id" : 3, "a" : [ 1, 2, 3 ] }

Voici ce qui se passe lorsque nous appliquons $concatArrays au a champ et un champ inexistant :

db.data.aggregate([
    { $match: { _id: 3 } },
    { $project: { 
        _id: 0,
        result: { $concatArrays: [ "$a", "$b" ] }
        }
    }
])

Résultat :

{ "result" : null }

Autres types de données

Chaque expression fournie à $concatArrays peut être n'importe quelle expression valide, tant qu'elle se résout en un tableau.

S'il ne se résout pas en tableau, une erreur est renvoyée.

Supposons que nous ayons le document suivant :

{ "_id" : 4, "a" : [ 1, 2, 3 ], "b" : 4 }

Voici ce qui se passe si nous essayons de concaténer le a et b champs :

db.data.aggregate([
    { $match: { _id: 4 } },
    { $project: { 
        _id: 0,
        result: { $concatArrays: [ "$a", "$b" ] }
        }
    }
])

Résultat :

Error: command failed: {
	"ok" : 0,
	"errmsg" : "$concatArrays only supports arrays, not double",
	"code" : 28664,
	"codeName" : "Location28664"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:618:17
[email protected]/mongo/shell/assert.js:708:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1046:12
@(shell):1:1

Dans cet exemple, j'ai essayé de concaténer un tableau avec un double mais j'ai eu une erreur qui indique $concatArrays ne prend en charge que les tableaux, pas double .