In MongoDB sind die $concatArrays
Der Aggregations-Pipeline-Operator verkettet zwei oder mehr Arrays und gibt das verkettete Array zurück.
Beispiel
Angenommen, wir haben eine Sammlung namens data
mit folgendem Dokument:
{ "_id" : 1, "a" : [ 1, 2, 3 ], "b" : [ 4, 5, 6 ] }
Wir können die $concatArrays
verwenden Operator, um das Array von a
zu verketten Feld mit dem Array des b
Feld:
db.data.aggregate([
{ $match: { _id: 1 } },
{ $project: {
_id: 0,
result: { $concatArrays: [ "$a", "$b" ] }
}
}
])
Ergebnis:
{ "result" : [ 1, 2, 3, 4, 5, 6 ] }
Leere Arrays
Das Verketten eines Arrays mit einem leeren Array ändert nichts.
Angenommen, unsere Sammlung enthält auch das folgende Dokument:
{ "_id" : 2, "a" : [ 1, 2, 3 ], "b" : [ ] }
Wenden wir $concatArrays
an dazu::
db.data.aggregate([
{ $match: { _id: 2 } },
{ $project: {
_id: 0,
result: { $concatArrays: [ "$a", "$b" ] }
}
}
])
Ergebnis:
{ "result" : [ 1, 2, 3 ] }
Am Ende haben wir das erste Array ohne Änderungen.
Fehlende Felder
Der Versuch, ein Feld mit einem nicht vorhandenen Feld zu verketten, gibt null
zurück .
Stellen Sie sich vor, unsere Sammlung enthält auch das folgende Dokument:
{ "_id" : 3, "a" : [ 1, 2, 3 ] }
Folgendes passiert, wenn wir $concatArrays
anwenden zum a
Feld und ein nicht vorhandenes Feld:
db.data.aggregate([
{ $match: { _id: 3 } },
{ $project: {
_id: 0,
result: { $concatArrays: [ "$a", "$b" ] }
}
}
])
Ergebnis:
{ "result" : null }
Andere Datentypen
Jeder Ausdruck, der für $concatArrays
bereitgestellt wird kann jeder gültige Ausdruck sein, solange er in ein Array aufgelöst wird.
Wenn es nicht in ein Array aufgelöst wird, wird ein Fehler zurückgegeben.
Angenommen, wir haben das folgende Dokument:
{ "_id" : 4, "a" : [ 1, 2, 3 ], "b" : 4 }
Folgendes passiert, wenn wir versuchen, a
zu verketten und b
Felder:
db.data.aggregate([
{ $match: { _id: 4 } },
{ $project: {
_id: 0,
result: { $concatArrays: [ "$a", "$b" ] }
}
}
])
Ergebnis:
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 diesem Beispiel habe ich versucht, ein Array mit einem Double zu verketten, aber ich habe einen Fehler erhalten, der besagt, dass $concatArrays nur Arrays unterstützt, kein Double .