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

MongoDB $split

In MongoDB der $split Der Aggregations-Pipeline-Operator teilt eine Zeichenfolge basierend auf einem Trennzeichen in ein Array von Teilzeichenfolgen auf.

Das Trennzeichen wird aus dem String entfernt und die Teilstrings werden als Elemente zum Array hinzugefügt.

Um $split zu verwenden , geben Sie die Zeichenfolge und das Trennzeichen an.

Wenn das Trennzeichen nicht in der Zeichenfolge gefunden wird, wird die ursprüngliche Zeichenfolge als einziges Element im Array zurückgegeben.

Beispiel 1

Angenommen, wir haben eine Sammlung namens test mit folgendem Dokument:

{ "_id" : 1, "data" : "March-18-2020" }

Wir können $split verwenden um die data aufzuteilen Feld am Bindestrich.

db.test.aggregate(
   [
     { $match: { _id: 1 } },
     {
       $project:
          {
            _id: 0,
            result: { $split: [ "$data", "-" ] }
          }
     }
   ]
)

Ergebnis:

{ "result" : [ "March", "18", "2020" ] }

Beispiel 2

Angenommen, wir haben das folgende Dokument:

{ "_id" : 2, "data" : "Sydney, Australia, NSW 2000" }

Wir können $split verwenden um das Datenfeld nach Komma und Leerzeichen zu trennen:

db.test.aggregate(
   [
     { $match: { _id: 2 } },
     {
       $project:
          {
            _id: 0,
            result: { $split: [ "$data", ", " ] }
          }
     }
   ]
)

Ergebnis:

{ "result" : [ "Sydney", "Australia", "NSW 2000" ] }

Beispiel 3

Hier ist noch ein Beispiel. Dieses Mal werden wir die Zeichenfolge basierend auf dem Leerzeichen zwischen den einzelnen Wörtern aufteilen.

Musterdokument:

{ "_id" : 3, "data" : "Homer Jay Einstein" }

Teilen wir es auf:

db.test.aggregate(
   [
     { $match: { _id: 3 } },
     {
       $project:
          {
            _id: 0,
            result: { $split: [ "$data", " " ] }
          }
     }
   ]
)

Ergebnis:

{ "result" : [ "Homer", "Jay", "Einstein" ] }

Falscher Datentyp

Die beiden Argumente müssen Zeichenfolgen sein. Die Angabe des falschen Datentyps führt zu einem Fehler.

Beispiel:

db.test.aggregate(
   [
     { $match: { _id: 1 } },
     {
       $project:
          {
            _id: 0,
            result: { $split: [ "$data", 18 ] }
          }
     }
   ]
)

Ergebnis:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "$split requires an expression that evaluates to a string as a second argument, found: double",
	"code" : 40086,
	"codeName" : "Location40086"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:639:17
[email protected]/mongo/shell/assert.js:729:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1058:12
@(shell):1:1

Wie die Fehlermeldung besagt, erfordert $split requires an expression that evaluates to a string as a second argument, found: double .