I MongoDB er $concatArrays
aggregeringspipeline-operatør sammenkæder to eller flere arrays og returnerer det sammenkædede array.
Eksempel
Antag, at vi har en samling kaldet data
med følgende dokument:
{ "_id" : 1, "a" : [ 1, 2, 3 ], "b" : [ 4, 5, 6 ] }
Vi kan bruge $concatArrays
operator til at sammenkæde arrayet af a
felt med arrayet af b
felt:
db.data.aggregate([
{ $match: { _id: 1 } },
{ $project: {
_id: 0,
result: { $concatArrays: [ "$a", "$b" ] }
}
}
])
Resultat:
{ "result" : [ 1, 2, 3, 4, 5, 6 ] }
Tomme arrays
Sammenkædning af et array med et tomt array ændrer ikke noget.
Antag, at vores samling også indeholder følgende dokument:
{ "_id" : 2, "a" : [ 1, 2, 3 ], "b" : [ ] }
Lad os anvende $concatArrays
til det::
db.data.aggregate([
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
result: { $concatArrays: [ "$a", "$b" ] }
}
}
])
Resultat:
{ "result" : [ 1, 2, 3 ] }
Vi ender med det første array uden ændringer.
Manglende felter
Forsøger du at sammenkæde et felt med et felt, der ikke eksisterer, returneres null
.
Forestil dig, at vores samling også indeholder følgende dokument:
{ "_id" : 3, "a" : [ 1, 2, 3 ] }
Her er, hvad der sker, når vi anvender $concatArrays
til a
felt og et ikke-eksisterende felt:
db.data.aggregate([
{ $match: { _id: 3 } },
{ $project: {
_id: 0,
result: { $concatArrays: [ "$a", "$b" ] }
}
}
])
Resultat:
{ "result" : null }
Andre datatyper
Hvert udtryk leveres til $concatArrays
kan være et hvilket som helst gyldigt udtryk, så længe det løses til et array.
Hvis det ikke løses til et array, returneres en fejl.
Antag, at vi har følgende dokument:
{ "_id" : 4, "a" : [ 1, 2, 3 ], "b" : 4 }
Her er, hvad der sker, hvis vi forsøger at sammenkæde a
og b
felter:
db.data.aggregate([
{ $match: { _id: 4 } },
{ $project: {
_id: 0,
result: { $concatArrays: [ "$a", "$b" ] }
}
}
])
Resultat:
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
I dette eksempel forsøgte jeg at sammenkæde et array med en dobbelt, men jeg fik en fejl, der siger $concatArrays understøtter kun arrays, ikke dobbelt .