I MongoDB, $concatArrays
aggregeringspipeline-operatör sammanfogar två eller flera matriser och returnerar den sammanlänkade matrisen.
Exempel
Anta att vi har en samling som heter data
med följande dokument:
{ "_id" : 1, "a" : [ 1, 2, 3 ], "b" : [ 4, 5, 6 ] }
Vi kan använda $concatArrays
operatorn för att sammanfoga arrayen för a
fältet med arrayen för b
fält:
db.data.aggregate([
{ $match: { _id: 1 } },
{ $project: {
_id: 0,
result: { $concatArrays: [ "$a", "$b" ] }
}
}
])
Resultat:
{ "result" : [ 1, 2, 3, 4, 5, 6 ] }
Tömma arrayer
Att sammanfoga en array med en tom array förändrar ingenting.
Anta att vår samling också innehåller följande dokument:
{ "_id" : 2, "a" : [ 1, 2, 3 ], "b" : [ ] }
Låt oss tillämpa $concatArrays
till det::
db.data.aggregate([
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
result: { $concatArrays: [ "$a", "$b" ] }
}
}
])
Resultat:
{ "result" : [ 1, 2, 3 ] }
Vi slutar med den första arrayen utan några ändringar.
Fält saknas
Om du försöker sammanfoga ett fält med ett fält som inte finns returneras null
.
Föreställ dig att vår samling också innehåller följande dokument:
{ "_id" : 3, "a" : [ 1, 2, 3 ] }
Här är vad som händer när vi använder $concatArrays
till a
fält och ett icke-existerande fält:
db.data.aggregate([
{ $match: { _id: 3 } },
{ $project: {
_id: 0,
result: { $concatArrays: [ "$a", "$b" ] }
}
}
])
Resultat:
{ "result" : null }
Andra datatyper
Varje uttryck tillhandahålls till $concatArrays
kan vara vilket giltigt uttryck som helst, så länge det löser sig till en array.
Om det inte löser sig till en array, returneras ett fel.
Anta att vi har följande dokument:
{ "_id" : 4, "a" : [ 1, 2, 3 ], "b" : 4 }
Här är vad som händer om vi försöker sammanfoga a
och b
fält:
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 det här exemplet försökte jag sammanfoga en array med en dubbel men jag fick ett felmeddelande som säger att $concatArrays endast stöder arrayer, inte dubbel .