sql >> Database >  >> NoSQL >> MongoDB

MongoDB $split

In MongoDB, de $split aggregatiepijplijnoperator verdeelt een string in een array van substrings op basis van een scheidingsteken.

Het scheidingsteken wordt uit de tekenreeks verwijderd en de subtekenreeksen worden als elementen aan de array toegevoegd.

Om $split te gebruiken , geeft u de tekenreeks en het scheidingsteken op.

Als het scheidingsteken niet in de tekenreeks wordt gevonden, wordt de oorspronkelijke tekenreeks geretourneerd als het enige item in de array.

Voorbeeld 1

Stel dat we een verzameling hebben met de naam test met het volgende document:

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

We kunnen $split . gebruiken om de data te splitsen veld bij het koppelteken.

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

Resultaat:

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

Voorbeeld 2

Stel dat we het volgende document hebben:

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

We kunnen $split . gebruiken om het gegevensveld te scheiden op basis van komma en spatie:

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

Resultaat:

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

Voorbeeld 3

Hier is nog een voorbeeld. Deze keer gaan we de string splitsen op basis van de ruimte tussen elk woord.

Voorbeelddocument:

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

Laten we het opsplitsen:

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

Resultaat:

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

Onjuist gegevenstype

De twee argumenten moeten strings zijn. Het verstrekken van het verkeerde gegevenstype resulteert in een fout.

Voorbeeld:

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

Resultaat:

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

Zoals de foutmelding aangeeft, vereist $split requires an expression that evaluates to a string as a second argument, found: double .


  1. MongoDB:match gebruiken met invoerdocumentvariabelen

  2. Hoe werkt SignalR.Redis onder de motorkap?

  3. MongoDB $sum Aggregation Pipeline Operator

  4. MongoDB GridFs met C#, hoe bestanden zoals afbeeldingen op te slaan?