Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

$replaceAll(集計)

項目一覧

  • 定義
  • 構文
  • 動作
$replaceAll

入力文字列内の検索文字列のすべてのインスタンスを置換文字列で置き換えます。

$replaceAll は大文字と小文字、および発音区別符号を区別し、コレクションに存在する照合を無視します。

$replaceAll演算子には次の演算子式の構文があります。

{ $replaceAll: { input: <expression>, find: <expression>, replacement: <expression> } }
フィールド
説明

findを適用する string 。 string またはnullに解決される任意の有効なを指定できます。 inputが欠落しているフィールドを参照する場合、 $replaceAllnullを返します。

指定された入力内で検索する string です。 string またはnullに解決される任意の有効なを指定できます。 findが欠落しているフィールドを参照する場合、 $replaceAllnullを返します。

input 内で find に一致したすべてのインスタンスを置き換えるために使用する文字列です。文字列または null に解決される任意の有効なを指定できます。

inputfind 、および置換式は、string またはnullに評価される必要があります。または$replaceAllはエラーで失敗します。

inputまたはfindが欠落しているフィールドを参照する場合、 nullが返されます。

input find 、または 置換 いずれかnull と評価されると、 式全体が$replaceAll と評価されます。null

結果
{ $replaceAll: { input: null, find: "abc", replacement: "ABC" } }
null
{ $replaceAll: { input: "abc", find: null, replacement: "ABC" } }
null
{ $replaceAll: { input: "abc", find: "abc", replacement: null } }
null

すべての$replaceAll式に対する string マッチングでは、常に大文字と小文字が区別され、発音区別符号が区別されます。 で string db.collection.aggregate()比較を実行する場合、コレクション、 、またはインデックスで構成された 照合 は無視されます。$replaceAll

たとえば、以下は照合強度 1 のサンプル コレクションを作成します。

db.createCollection( "myColl", { collation: { locale: "fr", strength: 1 } } )

照合強度が 1 の場合、基本文字のみが比較され、大文字と小文字や発音区別符号などの他の違いは無視されます。

次に、次の 3 つのサンプル ドキュメントを挿入します。

db.myColl.insertMany([
{ _id: 1, name: "cafe" },
{ _id: 2, name: "Cafe" },
{ _id: 3, name: "café" }
])

次の$replaceAll操作は、 nameフィールド内の "Cafe" のすべてのインスタンスを検索して置き換えようとします。

db.myColl.aggregate([
{
$addFields:
{
resultObject: { $replaceAll: { input: "$name", find: "Cafe", replacement: "CAFE" } }
}
}
])

$replaceAllはこのコレクションに構成された照合を無視するため、操作はドキュメント2の "Cafe" のインスタンスのみと一致します。

{ "_id" : 1, "name" : "cafe", "resultObject" : "cafe" }
{ "_id" : 2, "name" : "Cafe", "resultObject" : "CAFE" }
{ "_id" : 3, "name" : "café", "resultObject" : "café" }

$match のように照合を尊重する演算子は、"Cafe" で文字列比較を実行すると、3 つのドキュメントすべてに一致することになります。これは、このコレクションの照合強度が 1 であるためです。

$replaceAll集計式は Unicode 正規化を実行しません。 つまり、すべての$replaceAll式の string マッチングでは、一致を試みるときに Unicode で文字を表すのに使用されるコード ポイントの数が考慮されます。

例、文字 é は、1 つのコード ポイントまたは 2 つのコード ポイントを使用して Unicode で表すことができます。

Unicode
表示方法
コード ポイント
\xe9
é
1 ( \xe9 )
e\u0301
é
2 ( e + \u0301 )

文字 が 1 つのコード ポイントを持つ Unicode で表される 検索$replaceAll で を使用しても、stringéé 入力 に 2 つのコード ポイントを使用するstring のインスタンスと一致しません。

次の表は、 が 1 つのコード ポイントまたは 2 つのコード ポイントで表される 入力 文字列と比較して、"Cafe" の 検索 に一致が発生するかどうかを示しています。stringéこの例の検索stringは、1 つのコード ポイントを使用して é 文字を表します。

一致
{ $replaceAll: { input: "caf\xe9", find: "café", replacement: "CAFE" } }
はい
{ $replaceAll: { input: "cafe\u0301", find: "café", replacement: "CAFE" } }
no

$replaceAllは Unicode 正規化を実行しないため、最初の string 比較のみが一致します。ここでは、検索文字列と入力文字列の両方がéを表すために 1 つのコード ポイントを使用します。

次のドキュメントを使用して inventory コレクションを作成します。

db.inventory.insertMany([
{ "_id" : 1, "item" : "blue paint" },
{ "_id" : 2, "item" : "blue and green paint" },
{ "_id" : 3, "item" : "blue paint with blue paintbrush" },
{ "_id" : 4, "item" : "blue paint with green paintbrush" },
])

次の例では、item フィールド内の「blue paint」の各インスタンスを「red paint」に置き換えます。

db.inventory.aggregate([
{
$project:
{
item: { $replaceAll: { input: "$item", find: "blue paint", replacement: "red paint" } }
}
}
])

この操作は次の結果を返します。

{ "_id" : 1, "item" : "red paint" }
{ "_id" : 2, "item" : "blue and green paint" }
{ "_id" : 3, "item" : "red paint with red paintbrush" }
{ "_id" : 4, "item" : "red paint with green paintbrush" }

戻る

$replaceOne