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

MongoDB $ rtrim

    MongoDBでは、$rtrim 集計パイプライン演算子は、文字列の末尾から空白を削除します。これにはヌル文字が含まれます。

    指定した文字を削除することもできます。たとえば、これを使用してすべてのピリオド(.)を削除できます。 )、感嘆符(! )など、文字列の末尾から。

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

    { "_id" : 1, "name" : "Wag!!!", "type" : "   Dog   ", "weight" : 20 }

    type フィールドには、Dogという単語の両側に空白が含まれます 。 $rtrimを使用できます 文字列の右側から空白を削除してそのフィールドを返す演算子。

    例:

    db.pets.aggregate([
      { 
        $project: { 
          name: 1, 
          type: { $rtrim: { input: "$type" } } 
        } 
      }
    ])

    結果:

    { "_id" : 1, "name" : "Wag!!!", "type" : "   Dog" } 

    予想通り、type フィールドは最後に空白なしで返されました。最初の空白はまだ残っています。

    $ltrimを使用することもできます 文字列の左側をトリミングする演算子と、$trim 文字列の両側をトリミングする演算子。

    MongoDBが空白文字と見なす文字はかなりあります。完全なリストについては、MongoDBの空白文字を参照してください。

    他のキャラクターをトリミングする

    $rtrim 演算子はcharsを受け入れます トリミングする文字を指定できるパラメータ。

    例:

    db.pets.aggregate([
      { 
        $project: {
          name: { $rtrim: { input: "$name", chars: "!" } } 
        } 
      }
    ])

    結果:

    { "_id" : 1, "name" : "Wag" } 

    この場合、charsを含めました 感嘆符付きのパラメーター(! )、その結果、3つの感嘆符がすべて文字列の末尾から削除されました。

    複数の文字をトリミングする

    charsにすべて含めることで、複数の文字をトリミングできます。 引数。

    例:

    db.pets.aggregate([
      { 
        $project: { 
          name: { $rtrim: { input: "$name", chars: "!g" } } 
        } 
      }
    ])

    結果:

    { "_id" : 1, "name" : "Wa" } 

    この場合、charsとして2文字を指定しました 引数、およびそれらの文字の2つがたまたま文字列の最後にありました。したがって、これらの2つの文字はトリミングされました。

    ただし、これを行うときは注意してください。すべての文字を含めると、次のようになります。

    db.pets.aggregate([
      { 
        $project: { 
          name: { $rtrim: { input: "$name", chars: "!agW" } } 
        } 
      }
    ])

    結果:

    { "_id" : 1, "name" : "" }

    文字列全体が消えました。 !だけでなくトリミングされています およびg 文字列から削除されましたが、Wも削除されました およびa 文字。

    数値のトリミング

    $rtrim 演算子は文字列を処理します。 weightをトリミングしようとすると フィールドでは、エラーが発生します。これは、weightが原因です フィールドは数値であり、文字列ではありません。

    db.pets.aggregate([
      { 
        $project: { 
          name: 1, 
          weight: { $rtrim: { input: "$weight", chars: "0" } } 
        } 
      }
    ])

    結果:

    Error: command failed: {
    	"ok" : 0,
    	"errmsg" : "$rtrim requires its input to be a string, got 20 (of type double) instead.",
    	"code" : 50699,
    	"codeName" : "Location50699"
    } : 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

    このエラーは、doubleを提供したこと、および$rtrimであることを示しています。 演算子では、入力が文字列である必要があります。

    本当にゼロを削除したい場合は、最初にそれを文字列に変換する必要があります。 $convertのいずれかでそれを行うことができます または$toString オペレーター。

    例:

    db.pets.aggregate([
      { 
        $project: { 
          name: 1, 
          weight: { $rtrim: { input: { $toString: "$weight" }, chars: "0" } }
        }
      }
    ])

    結果:

    { "_id" : 1, "name" : "Wag!!!", "weight" : "2" } 

    $convertを使用すると、doubleに戻すことができます。 または$toDouble オペレーター。

    完全な例:

    db.pets.aggregate([
      { 
        $project: { 
          name: 1, 
          weight: { $toDouble: { $rtrim: { input: { $toString: "$weight" }, chars: "0" } } }
        }
      }
    ])

    結果:

    { "_id" : 1, "name" : "Wag!!!", "weight" : 2 } 

    1. SignalR.Redisは内部でどのように機能しますか?

    2. NoSQLデータベースの戦い-MongoDBとMSSQLのNoSQL関数の比較

    3. Hadoopでのマップのみのジョブとは何ですか?

    4. 新しい値をmongodb内部配列にプッシュします-mongodb/php