MongoDBで一意のデータをランダム化する方法:EmailIdの値を「John」で始まる文字列に更新する
一意のデータをランダム化したい場合、MongoDBでは Math.random() を活用することで実現できます。本記事では、EmailId フィールドが null のドキュメントに対して、「John」で始まるランダムなメールアドレス形式の値を設定する手順を解説します。
1. サンプルコレクションの作成
まず、ドキュメントを含むコレクションを作成します。ここでは demo561 というコレクションに、EmailId が null のドキュメントを3件挿入します。
> db.demo561.insertOne({EmailId:null});{
"acknowledged" : true, "insertedId" : ObjectId("5e8f490454b4472ed3e8e86c")
}
> db.demo561.insertOne({EmailId:null});{
"acknowledged" : true, "insertedId" : ObjectId("5e8f490654b4472ed3e8e86d")
}
> db.demo561.insertOne({EmailId:null});{
"acknowledged" : true, "insertedId" : ObjectId("5e8f490a54b4472ed3e8e86e")
}2. 挿入したドキュメントの確認
find() メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。
> db.demo561.find();
このクエリを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5e8f490454b4472ed3e8e86c"), "EmailId" : null }
{ "_id" : ObjectId("5e8f490654b4472ed3e8e86d"), "EmailId" : null }
{ "_id" : ObjectId("5e8f490a54b4472ed3e8e86e"), "EmailId" : null }3. ランダムな値への更新クエリ
続いて、MongoDBで一意のデータをランダム化するためのクエリを見ていきましょう。forEach() で各ドキュメントを走査しながら、update() と $set 演算子を使って EmailId を書き換えます。
> db.demo561.find().forEach(function(doc){
... db.demo561.update({_id : doc._id}, {$set:{
... EmailId:'John'+Math.random()*100000000000000000+'@'+Math.random()*100000000000000000+'.com'
... }})
... })このクエリでは、ローカル部分に「John」+乱数、ドメイン部分にも乱数を組み合わせることで、各ドキュメントに重複しないメールアドレス風の文字列が生成されます。
4. 更新結果の確認
再度 find() メソッドを実行して、コレクション内のすべてのドキュメントを表示します。
> db.demo561.find();
実行すると、次のように各ドキュメントの EmailId がランダムな値に更新されていることが確認できます。
{ "_id" : ObjectId("5e8f490454b4472ed3e8e86c"), "EmailId" : "John23607829153155868@62688631475897960.com" }
{ "_id" : ObjectId("5e8f490654b4472ed3e8e86d"), "EmailId" : "John63351292234094710@79460595429439740.com" }
{ "_id" : ObjectId("5e8f490a54b4472ed3e8e86e"), "EmailId" : "John71315584787457890@99884571221675000.com" }まとめ
このように、forEach() と Math.random() を組み合わせることで、既存のコレクション内の null 値やプレースホルダーとなっているフィールドに対して、一意かつランダムなデータを簡単に一括設定できます。テストデータの生成やマスキング処理など、さまざまな場面で応用できるテクニックです。
-
意外な組み合わせ:MongoDBとMySQLの共存戦略
データストアの選択肢とその組み合わせの豊富さは、もはや「ワン・サイズ・フィッツ・オール(一つで全てに対応)」なデータストアの世界ではないことを証明しています。 今日では、SQLデータストア(MySQL、PostgreSQL、Oracle、SQL Serverなど)とNoSQLデータストア(MongoDB、CouchDB、Neo4jなど)を組み合わせて使う明確な理由があります。エンタープライズにおいてOracleが依然としてシステム・オブ・レコード(信頼性の高い基幹データベース)として好まれる存在である一方で、それが唯一の選択肢ではなくなりました。 開発者たちは、SQLとNoSQLを組み合わ
-
AEMとMongoDBの連携徹底解説:MongoMKのアーキテクチャとマルチサイト運用の落とし穴
MongoDBとは何か?MongoDBは、ドキュメント指向のNoSQLデータベースです。従来のリレーショナルモデル(RDBMS)から離れ、柔軟かつ水平スケール可能なデータ管理の仕組みを提供します。JSONライクなドキュメント形式(BSON)でデータを格納するため、構造が流動的なコンテンツやアプリケーション開発に適しており、Adobe Experience Manager(AEM)のような大規模コンテンツ管理プラットフォームとの組み合わせでも注目されてきました。 AEMとMongoDBはどのように連携するのか?AEMとMongoDBの連携は、crx3mongo ランモードと、JVMオプションの