【MongoDB】クエリ出力を一時的なデータベース(コレクション)に保存する方法
MongoDBでは、forEach()メソッドを活用することで、単一のクエリ内でクエリ結果を取得し、一時的なデータベース(別のコレクション)に保存することができます。本記事では、その具体的な手順をサンプルコード付きで解説します。
サンプルコレクションの作成
まず、ドキュメントを含むコレクションを作成しましょう。ここでは「demo43」というコレクションに学生名のデータを挿入します。
> db.demo43.insertOne({"StudentName":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e25d4b3cfb11e5c34d898e5")
}
> db.demo43.insertOne({"StudentName":"Bob"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e25d4b8cfb11e5c34d898e6")
}
> db.demo43.insertOne({"StudentName":"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e25d4bbcfb11e5c34d898e7")
}
find()メソッドで全ドキュメントを表示する
find()メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。
> db.demo43.find();
このクエリを実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5e25d4b3cfb11e5c34d898e5"), "StudentName" : "Chris" }
{ "_id" : ObjectId("5e25d4b8cfb11e5c34d898e6"), "StudentName" : "Bob" }
{ "_id" : ObjectId("5e25d4bbcfb11e5c34d898e7"), "StudentName" : "David" }
クエリ出力を一時的なDBに保存するクエリ
続いて、クエリの出力を一時的なDB(ここでは「demo44」)に保存します。forEach()で各ドキュメントを順番に取り出し、コールバック関数内でinsert()を使って新しいコレクションに挿入しています。
> db.demo43.find().forEach(function(myDocument) { db.demo44.insert(myDocument); } )
保存結果の確認
もう一度find()メソッドを使用して、新しいコレクション内のすべてのドキュメントを表示してみましょう。
> db.demo44.find();
実行結果は以下の通りです。元のコレクションと同じドキュメントが正しくコピーされていることが確認できます。
{ "_id" : ObjectId("5e25d4b3cfb11e5c34d898e5"), "StudentName" : "Chris" }
{ "_id" : ObjectId("5e25d4b8cfb11e5c34d898e6"), "StudentName" : "Bob" }
{ "_id" : ObjectId("5e25d4bbcfb11e5c34d898e7"), "StudentName" : "David" }
まとめ
このように、forEach()とinsert()を組み合わせることで、クエリ結果を簡単に別のコレクションへコピーできます。なお、MongoDB 3.2以降ではinsertMany()や、集計パイプラインの$out・$mergeステージを利用する方法もあります。大量のドキュメントを扱う場合は、これらの方法の方がパフォーマンス面で有利なので、用途に応じて使い分けるとよいでしょう。
-
MongoDBのサブドキュメントを検索する方法:ドット表記を使ったクエリ実行手順を解説
MongoDBでは、ネストされたサブドキュメント(埋め込みドキュメント)を検索する際に、ドット表記(dot notation)を使用します。フィールド名とサブフィールド名をドット(.)でつなぐことで、階層構造を持つデータにも簡単にアクセスできます。この記事では、実際にコレクションを作成し、サブドキュメントに対してクエリを実行するまでの手順をサンプルコード付きで解説します。1. コレクションの作成とドキュメントの挿入まず、insertOne()メソッドを使って、サブドキュメントを含むドキュメントをコレクションに挿入します。> db.demo537.insertOne({details:{S
-
MongoDBでSQLのLIKE検索と同じことを実現する方法
MongoDBにおけるLIKE検索の基本SQLの「LIKE」句のように部分一致でデータを検索したい場合、MongoDBでは find() メソッドと正規表現(//)を組み合わせることで同様の処理を実現できます。この記事では、実際にコレクションを作成し、正規表現を使ったLIKE検索の具体的な手順を解説します。テスト用コレクションの作成まず、サンプルとなるドキュメントを含むコレクションを作成しましょう。ここでは「FirstName」というフィールドを持つドキュメントをいくつか登録します。> db.demo686.insertOne({FirstName:Robert});{ &nb