MongoDBでNumberLong型のフィールドを検索して置換する方法
MongoDBでNumberLong型のフィールドを検索し、別の値に置き換えたい場合は、update()メソッドと$set演算子を組み合わせて使用します。本記事では、実際のコード例を使いながら、その手順をわかりやすく解説します。
サンプルコレクションの作成
まず、ドキュメントを格納するコレクションを作成します。ここでは「UserId」フィールドをNumberLong型として設定しています。
> db.findAndReplaceDemo.insertOne({"UserId":NumberLong(101)});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd2c960b64f4b851c3a13b6")
}
> db.findAndReplaceDemo.insertOne({"UserId":NumberLong(110)});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd2c966b64f4b851c3a13b7")
}
> db.findAndReplaceDemo.insertOne({"UserId":NumberLong(101)});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd2c969b64f4b851c3a13b8")
}
> db.findAndReplaceDemo.insertOne({"UserId":NumberLong(120)});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd2c96cb64f4b851c3a13b9")
}
> db.findAndReplaceDemo.insertOne({"UserId":NumberLong(130)});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd2c96eb64f4b851c3a13ba")
}登録済みドキュメントの確認
find()メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。
> db.findAndReplaceDemo.find().pretty();
実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5cd2c960b64f4b851c3a13b6"), "UserId" : NumberLong(101) }
{ "_id" : ObjectId("5cd2c966b64f4b851c3a13b7"), "UserId" : NumberLong(110) }
{ "_id" : ObjectId("5cd2c969b64f4b851c3a13b8"), "UserId" : NumberLong(101) }
{ "_id" : ObjectId("5cd2c96cb64f4b851c3a13b9"), "UserId" : NumberLong(120) }
{ "_id" : ObjectId("5cd2c96eb64f4b851c3a13ba"), "UserId" : NumberLong(130) }NumberLong型フィールドの検索と置換
続いて、MongoDBでNumberLong型のフィールドを検索して置換するクエリを見ていきましょう。ポイントは、update()の第3引数にfalse(upsert無効)、第4引数にtrue(複数ドキュメントの一括更新)を指定することです。これにより、条件に一致したすべてのドキュメントがまとめて更新されます。
> db.findAndReplaceDemo.update({"UserId":NumberLong(101)}, {$set:{"UserId":NumberLong(10001)}},false,true);
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })結果を見ると、「nMatched: 2」「nModified: 2」と表示されており、NumberLong(101)に該当する2件のドキュメントが正常に更新されたことがわかります。
更新結果の確認
それでは、先ほどのコレクションから更新後のデータを確認してみましょう。
> db.findAndReplaceDemo.find().pretty();
実行すると、以下の出力が得られます。
{
"_id" : ObjectId("5cd2c960b64f4b851c3a13b6"),
"UserId" : NumberLong(10001)
}
{ "_id" : ObjectId("5cd2c966b64f4b851c3a13b7"),
"UserId" : NumberLong(110)
}
{
"_id" : ObjectId("5cd2c969b64f4b851c3a13b8"),
"UserId" : NumberLong(10001)
}
{
"_id" : ObjectId("5cd2c96cb64f4b851c3a13b9"),
"UserId" : NumberLong(120)
}
{
"_id" : ObjectId("5cd2c96eb64f4b851c3a13ba"),
"UserId" : NumberLong(130)
}ご覧のとおり、元々NumberLong(101)だった2件のドキュメントが、どちらもNumberLong(10001)へ正しく置き換えられています。他のドキュメント(NumberLong(110)、120、130)には影響が出ていないことも確認できます。
補足:最新のMongoDBでの推奨される書き方
MongoDB 3.2以降では、update()の代わりにupdateMany()メソッドの使用が推奨されています。同じ処理は、よりシンプルに以下のように記述できます。
db.findAndReplaceDemo.updateMany(
{ "UserId": NumberLong(101) },
{ $set: { "UserId": NumberLong(10001) } }
);updateMany()はデフォルトで複数ドキュメントを対象とするため、第3・第4引数を指定する必要がなく、コードの意図も明確になります。新規開発ではこちらを採用しましょう。
-
Microsoft Publisherで「検索と置換」を使う方法をわかりやすく解説
Microsoft OfficeのアプリケーションのひとつであるPublisher(パブリッシャー)には、文書内の特定の文字列を探して別の文字列に一括変更できる「置換」機能が搭載されています。WordとPublisherでは、この機能に若干の違いがあります。Wordで「置換」を選択すると、「検索」「置換」「ジャンプ」の3つのタブが表示されますが、Publisherの場合は「検索」と「置換」の2つのタブのみとなっています。 Publisherで検索と置換を使用する手順 以下の手順に従って、Microsoft Publisherの置換機能を活用しましょう。 Publisherを起動します。 文書
-
Pythonでパターンに一致する単語を見つけて置換する方法
問題の概要 単語のリスト words とパターン pattern が与えられたとき、リストの中からパターンに一致する単語をすべて見つけます。ここで「単語がパターンに一致する」とは、文字同士の一対一の対応付け(置換)p が存在し、パターン内のすべての文字 x を p(x) に置き換えると、その単語と完全に一致することを意味します。 例として、入力が [abc, deq, mee, aqq, dkd, ccc]、パターンが abb の場合を考えてみましょう。このときの出力は [mee, aqq] になります。「mee」も「aqq」も、1文字目と2文字目が異なり、2文字目と3文字目が同じという ab