MongoDB $ concatarrays

MongoDB $ concatarrays

Die $ concatarrays ist die Array -Expression von MongoDB, die in der Aggregation Pipeline -Methode verwendet wird. Der $ concatarrays -Operator wird verwendet, um die beiden Dokumentenarrays in einem einzelnen Array zu verkettet. Um ein einzigartiges Array zu machen, können wir mehr als zwei Arrays mit dem $ concatarrays -Operator verkettet. Der wichtige Punkt ist, dass der $ concatarrays -Operator die Array -Felder in MongoDB nur auflöst oder den Fehler generiert. Das Array muss eine gültige Erklärung für $ concatarrays sein, bevor es in ein geänderter Array umgewandelt werden kann. Der $ concatarrays -Betreiber gibt Null zurück, wenn eines der Argumente ein nicht vorhandenes Feld ist oder auf einen Nullwert auflöst. Dieser Artikel enthält weitere Informationen zum $ concatarrays -Operator.

So verwenden Sie den $ concatarrays -Operator in MongoDB

Wir verwenden den $ concatarrays -Operator von MongoDB, um die beiden Arrays als einzelne Array zusammenzuführen. Der $ concatarrays -Betreiber wird im Sammlungsdokument „Games“ verwendet. Die MongoDB -Sammlung „Spiele“ wird mit den folgenden Dokumenten mit dem Befehl InsertMany () festgelegt. Diese Dokumente enthalten auch die Array -Felder, die vom $ concatarrays -Operator hier verwendet werden, um sich ihnen anzuschließen.

db.Spiele.InsertMany ([

"_id": 1,
"Spiel": "Fußball",
"Team1": ["David", "Mark", "Levis"],
"Team2": ["Sam", "Alex", "Orchid"],
"Score1": [20, 14, 8],
"Score2": [7, 19, 21]
,

"_id": 2,
"Spiel": "Tennis",
"Team1": ["Bella", "Emily", "Alice"],
"Team2": ["Stella", "Bloom", "Olive"],
"Score1": [19, 15, 18],
"Score2": [17, 10, 11]
,

"_id": 3,
"Spiel": "Basketball",
"Team1": ["George", "Smith", "Polard"],
"Team2": [],
"Score1": [21, 15, 6],
"Score2": [4, 13, 19]
,

"_id": 4,
"Spiel": "Badminton",
"Team1": ["David", "Mark", "Levis"],
"Team2": 0,
"Score1": [20, 14, 8],
"Score2": [7, 19, 21]

]))

Wenn wir die InsertMany () -frage in der MongoDB -Shell ausführen, entspricht sie die folgenden Ergebnisse:

Anerkannt: True, InisedIds: '0': 1, '1': 2, '2': 3, '3': 4

Beispiel 1: MongoDB $ concatarrays -Operator, um das Ganzzahl -Array zu verkettet

Wir verwenden den MongoDB $ concatarrays -Operator, um das Array der Ganzzahlelemente zu verkettet. Hier verwenden wir die Felder von $ Score1 und $ Score2 für den Vorgang, da sie die numerischen Werte des Arrays enthalten. Wir verwenden den Aggregate () -Operator, bei dem der $ Match -Operator dem Dokument entspricht, das den Zustand „„ Spiel “:„ Fußball ““ erfüllt. Dann verwenden wir den $ Project -Operator für die Aufnahme des Feldes „NewArray“. Das Feld „NewArray“ hat den $ concatarrays -Operator, der die Array -Felder „$ Score1“ und „$ Score2“ eingibt. Der $ concatarrays -Betreiber verschmilzt die Werte dieser Felder nur für das Dokument, dessen Spielfeld den Wert „Fußball“ hat.

db.Spiele.Aggregat([
$ match: "game": "football",
$ project:
NewArray: $ concatArrays: ["$ Score1", "$ Score2"]])

Das Array, das in der Ausgabe gegen das Feld „NewArray“ angezeigt wird. Beachten Sie, dass ein wiederholter Wert im Array nicht zweimal verkettet wird. Es erscheint nur einzeln im neu generierten Array des $ concatarrays -Operator.

[_id: 1, newarray: [20, 14, 8, 7, 19, 21]]

Beispiel 2: MongoDB $ concatarrays -Operator, um das String -Array zu verkettet

Wir verwenden den $ concatarrays -Operator, um den numerischen Array -Werten beizutreten. Der $ concatArrays -Operator von MongoDB verschmilzt auch den String -Array -Wert in einem einzelnen Array. Genau wie das Integer -Array fügt der $ concatarrays -Operator die einzigartigen Elemente des String -Arrays zusammen. Hier stimmen wir dem Dokument mit dem "Tennis" -Wert gegen das Feld "Spiele" ab. Sobald das Dokument vom $ Match -Betreiber abgestimmt ist, wenden wir den $ concatarrays -Betreiber auf den String Array Fields, "$ Team1" und "$ team2" an, und "$ team2". Das projizierte Feld „Newarray“ zeigt das resultierende Array des $ concatarrays -Operators an.

db.Spiele.Aggregat([
$ Match: "Game": "Tennis",
$ project: newArray:
$ concatarrays: ["$ team1", "$ team2"]])

Die Stringwerte der Felder "$ team1" und "$ team2" werden vom $ concatArrays -Betreiber im folgenden Bereich "NewArray" verkettet:

[

_id: 2,
NEWARAY: ['Bella', 'Emily', 'Alice', 'Stella', 'Bloom', 'Olive']

]

Beispiel 3: MongoDB $ concatarrays -Operator, um die leeren Arrays zu verkettet

Wenn der $ concatarrays -Operator mit einem anderen leeren Feld das Array -Feld anschließt, treten keine Änderungen auf. Das Array -Feld, das die Werte enthält, wird nur im neuen modifizierten Array angezeigt. Betrachten wir die Arbeit des $ concatarrays -Operators auf dem Feld Leer -Array. Wir suchen zuerst das Dokument mit dem leeren Array. Der $ Match -Operator wird verwendet, um das Dokument mit dem Feld "_id" und den Wert von "3" zu finden. Dann haben wir das Feld "ArrayResult" -Einschluss, das mit dem $ concatarrays -Betreiber beschäftigt ist. Die $ concatarrays verwendet den Ausdruck [„$ team1“, „$ team2“], um sie als einzigartiges Array zusammenzuführen.

db.Spiele.Aggregat([
$ Match: _id: 3,
$ project:
_id: 0,
NEUARAY: $ concatArrays: ["$ team1", "$ team2"]


]))

Das resultierende Array zeigt nur das Element des ersten Arrays des $ concatarrays -Operators an, da das zweite Array leer ist.

[Newarray: ['George', 'Smith', 'Polard']]

Beispiel 4: MongoDB $ concatarrays -Operator, um die Arrays eines anderen Typs zu verkettet

Der $ concatarrays -Operator nimmt das Argument nur als gültigen Ausdruck, um die Arrays zu beheben. MongoDB erzeugt einen Fehler, wenn der $ concatarrays -Operator nicht in ein Array aufgelöst werden kann. Hier ist die Abfrage, bei der der ungültige Ausdruck in den $ concatarrays übergeben wird. Wir stellen zuerst den $ Match -Operator in der Aggregate () -Methode ein, die mit den Dokumenten der Sammlung, mit der wir arbeiten, mit dem Ausdruck „_id: 4“ übereinstimmt. Danach haben wir einen $ -Projektbetreiber für die Unterdrückung des Felds „_id“, da ihm „0“ zugewiesen wird. Dann haben wir das Feld „ArrayResult“, in dem der $ concatarrays -Betrieb durchgeführt wird. Der $ concatarrays -Betreiber hier gibt "$ team1" das Array -Feld mit dem Zeichenfolgenwert und das Feld "$ team2" nicht das Array. Darüber hinaus hat das Feld $ team2 eine Art Ganzzahlwert.

db.Spiele.Aggregat([
$ Match: _id: 4,
$ project:
_id: 0,
ArrayResult: $ concatArrays: ["$ team1", "$ team2"]


]))

Dort begegnen wir auf den MongoDB -Serverfehler als $ concatarrays -Operator, der versucht, dem Array mit dem anderen Typ beizutreten.

"MongoServerError: Planexecutor -Fehler während der Aggregation :: verursacht durch :: $ concatArrays unterstützt nur Arrays, nicht int"

Beispiel 5: MongoDB $ concatarrays -Operator, um das Array des fehlenden Feldes zu verkettet

Wenn der $ concatarrays -Operator verwendet wird, um dem Feldarray zu beitreten, das in keinem der Dokumente vorhanden ist, wird der Null in der Ausgabe erhalten. Betrachten Sie die Anweisung mit dem Beispielskript. Wir verkettet die Array -Felder, indem wir das Dokument „_id: 4“ mit dem $ Match -Operator übereinstimmen. Dann haben wir einen $ -Projektbetreiber, der das Feld „Ergebnisarr“ definiert. Das Feld „Ergebnis“ hat den $ concatArrays -Betreiber, mit dem sich dem Feld „$ team1“ anschließt, das im Feld „$ team3“ im Feld „$ team3“ enthalten ist, das nicht Teil des Dokuments ist.

db.Spiele.Aggregat([
$ Match: _id: 2,
$ project:
_id: 0,
Ergebnisarr: $ concatArrays: ["$ team1", "$ team3"]


]))

Wenn die Abfrage in der MongoDB -Shell ausgeführt wird, wird das „Null“ aus dem $ concatoperator abgerufen, da das Feld $ team3 nicht im Dokument von „_id: 4“ enthalten ist.

[Resultarr: null]

Abschluss

In diesem Artikel handelt. Wir haben die Integer -Arrays und die String -Arrays mit Hilfe des $ concatarrays -Operators zusammengefasst. Dann verwendeten wir den $ concatarrays -Operator, um das leere Array mit dem gefüllten Array zu verkettet, das mit dem ersten Array -Element in der Ausgabe endete. Wir haben uns auch dem Array mit dem fehlenden Array angeschlossen, das den Nullwert zurückgibt. Am Ende nahmen wir den Fall des $ concatarrays -Operators, wo wir uns den Arrays verschiedener Typen angeschlossen haben.