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

$replaceOne(集計)

項目一覧

  • 定義
  • 構文
  • 動作
$replaceOne

入力文字string内の検索文字列の最初のインスタンスを置換文字stringで置き換えstring 。

出現するものが見つからない場合、 $replaceOneは入力 string として評価されます。

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

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

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

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

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

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

入力 内に find$replaceOne の出現が見つからない場合、 は入力string と評価されます。

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

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

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

結果

{ $replaceOne: { input: null, find: "abc", replacement: "ABC" } }

null

{ $replaceOne: { input: "abc", find: null, replacement: "ABC" } }

null

{ $replaceOne: { input: "abc", find: "abc", replacement: null } }

null

すべての$replaceOne式に対する string マッチングでは、常に大文字と小文字が区別され、発音区別符号が区別されます。 $replaceOneで string 比較を実行する場合、構成された照合は無視されます。

たとえば、以下は照合強度 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é" }
])

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

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

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

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

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

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

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

Unicode
表示方法
コード ポイント

\xe9

é

1 ( \xe9 )

e\u0301

é

2 ( e + \u0301 )

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

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

一致

{ $replaceOne: { input: "caf\xe9", find: "café", replacement: "CAFE" } }

はい

{ $replaceOne: { input: "cafe\u0301", find: "café", replacement: "CAFE" } }

no

$replaceOneは 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フィールド内の「青い塗料」の最初のインスタンスを「赤色の塗料」に置き換えます。

db.inventory.aggregate([
{
$project:
{
item: { $replaceOne: { 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 blue paintbrush" }
{ "_id" : 4, "item" : "red paint with green paintbrush" }

ドキュメント3では、「青い塗料」 の最初に一致したインスタンスのみが置き換えられることに注意してください。

戻る

$regexMatch