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 }