sql >> データベース >  >> NoSQL >> MongoDB

MongoDB $ split

    MongoDBでは、$split 集計パイプライン演算子は、区切り文字に基づいて文字列をサブ文字列の配列に分割します。

    区切り文字が文字列から削除され、部分文字列が要素として配列に追加されます。

    $splitを使用するには 、文字列と区切り文字を指定します。

    文字列に区切り文字が見つからない場合は、元の文字列が配列内の唯一の項目として返されます。

    例1

    testというコレクションがあるとします。 次のドキュメントで:

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

    $splitを使用できます dataを分割するには ハイフンのフィールド。

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

    結果:

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

    例2

    次のドキュメントがあるとします。

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

    $splitを使用できます カンマとスペースに基づいてデータフィールドを区切るには:

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

    結果:

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

    例3

    もう1つの例を示します。今回は、各単語間のスペースに基づいて文字列を分割します。

    サンプルドキュメント:

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

    分割しましょう:

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

    結果:

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

    間違ったデータ型

    2つの引数は文字列でなければなりません。間違ったデータ型を指定すると、エラーが発生します。

    例:

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

    結果:

    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

    エラーメッセージに示されているように、$split requires an expression that evaluates to a string as a second argument, found: double


    1. Redis接続を閉じたり開いたままにしたりする必要があるのはなぜですか?

    2. リモートmongodbをpymongoに接続する方法

    3. Mysql、Redis、Mongo間で分散トランザクションを実装する方法

    4. 論理バックアップを使用してMongoDBで特定のコレクションを復元する方法