MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

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引数を指定する必要がなく、コードの意図も明確になります。新規開発ではこちらを採用しましょう。

  1. Microsoft Publisherで「検索と置換」を使う方法をわかりやすく解説

    Microsoft OfficeのアプリケーションのひとつであるPublisher(パブリッシャー)には、文書内の特定の文字列を探して別の文字列に一括変更できる「置換」機能が搭載されています。WordとPublisherでは、この機能に若干の違いがあります。Wordで「置換」を選択すると、「検索」「置換」「ジャンプ」の3つのタブが表示されますが、Publisherの場合は「検索」と「置換」の2つのタブのみとなっています。 Publisherで検索と置換を使用する手順 以下の手順に従って、Microsoft Publisherの置換機能を活用しましょう。 Publisherを起動します。 文書

  2. Pythonでパターンに一致する単語を見つけて置換する方法

    問題の概要 単語のリスト words とパターン pattern が与えられたとき、リストの中からパターンに一致する単語をすべて見つけます。ここで「単語がパターンに一致する」とは、文字同士の一対一の対応付け(置換)p が存在し、パターン内のすべての文字 x を p(x) に置き換えると、その単語と完全に一致することを意味します。 例として、入力が [abc, deq, mee, aqq, dkd, ccc]、パターンが abb の場合を考えてみましょう。このときの出力は [mee, aqq] になります。「mee」も「aqq」も、1文字目と2文字目が異なり、2文字目と3文字目が同じという ab