MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB $concatArrays

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 .