In MongoDB, de $concatArrays
aggregatiepijplijnoperator voegt twee of meer arrays samen en retourneert de aaneengeschakelde array.
Voorbeeld
Stel dat we een verzameling hebben met de naam data
met het volgende document:
{ "_id" : 1, "a" : [ 1, 2, 3 ], "b" : [ 4, 5, 6 ] }
We kunnen de $concatArrays
. gebruiken operator om de array van de a
. samen te voegen veld met de array van de b
veld:
db.data.aggregate([
{ $match: { _id: 1 } },
{ $project: {
_id: 0,
result: { $concatArrays: [ "$a", "$b" ] }
}
}
])
Resultaat:
{ "result" : [ 1, 2, 3, 4, 5, 6 ] }
Lege arrays
Het aaneenschakelen van een array met een lege array verandert niets.
Stel dat onze collectie ook het volgende document bevat:
{ "_id" : 2, "a" : [ 1, 2, 3 ], "b" : [ ] }
Laten we $concatArrays
toepassen naar dat::
db.data.aggregate([
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
result: { $concatArrays: [ "$a", "$b" ] }
}
}
])
Resultaat:
{ "result" : [ 1, 2, 3 ] }
We eindigen met de eerste array zonder enige wijzigingen.
Ontbrekende velden
Proberen een veld samen te voegen met een veld dat niet bestaat, retourneert null
.
Stel je voor dat onze collectie ook het volgende document bevat:
{ "_id" : 3, "a" : [ 1, 2, 3 ] }
Dit is wat er gebeurt als we $concatArrays
toepassen naar de a
veld en een niet-bestaand veld:
db.data.aggregate([
{ $match: { _id: 3 } },
{ $project: {
_id: 0,
result: { $concatArrays: [ "$a", "$b" ] }
}
}
])
Resultaat:
{ "result" : null }
Andere gegevenstypen
Elke uitdrukking die wordt verstrekt aan $concatArrays
kan elke geldige uitdrukking zijn, zolang deze maar wordt omgezet in een array.
Als het niet wordt opgelost in een array, wordt er een fout geretourneerd.
Stel dat we het volgende document hebben:
{ "_id" : 4, "a" : [ 1, 2, 3 ], "b" : 4 }
Dit is wat er gebeurt als we proberen de a
. samen te voegen en b
velden:
db.data.aggregate([
{ $match: { _id: 4 } },
{ $project: {
_id: 0,
result: { $concatArrays: [ "$a", "$b" ] }
}
}
])
Resultaat:
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
In dit voorbeeld heb ik geprobeerd een array samen te voegen met een double, maar ik kreeg een foutmelding dat $concatArrays alleen arrays ondersteunt, niet double .