クエリー

based on v18

MongoDBのすばらしいところの一つとして、ダイナミックなクエリーのサポートがあります。これはデータを探すのに特別なindedxとかを必要としません。ユーザは、好きな条件で検索することができます。リレーショナルデータベースでは、ダイナミッククエリーは普通のことです。リレーショナルデータベースからMongoDBに移動する場合に、たくさんのSQLクエリーが簡単にMongoDBのドキュメントベースのクエリー言語に変換できます。

クエリ記述オブジェクト

MongoDBは、データ取得のために多くの種類の クエリーオブジェクト をサポートしています。クエリーは、BSONドキュメントで表現します。たとえば、MongoDBシェルを使って、 users コレクションに入っているすべてのドキュメントを取得したいとします。このときクエリーは以下のようになります。

 db.users.find({})

このケースでは、コレクション内のすべてのドキュメントにマッチさせたいので、セレクターは空のドキュメントです。次は、条件付きの例です。

 db.users.find({'last_name': 'Smith'})

このセレクターは、 last_name が 'Smith' のドキュメントすべてがマッチします。

MongoDBは、幅広く色々なドキュメントセレクターをサポートします。色々な例が、 [MongoDB Tutorial] または、 高度なクエリー にあります。シェルではなく他の言語から使う場合には、ドライバーのドキュメントを参照してください。

クエリーオプション

フォールドの選択

上記クエリー表現に加え、MongoDBはいくつかの他の引数を取ります。例えば、特定のフィールドしか返さないようなリクエストです。たとえば、last nameが'Smith'のユーザのsocial security numbers (ssn)だけを取得したい場合、次のようなクエリーをシェルで発行できます。

 // last_name == 'Smith' なドキュメントのssnを取得
db.users.find({last_name: 'Smith'}, {'ssn': 1});

// すべてのドキュメントから、 thumbnail フィールドを*除いた*もの取得。
db.users.find({}, {thumbnail:0});

_id は、明示的に指定しなくても、常に返されます。

ソート

MongoDBは結果をソートして返すこともできます。すべてのドキュメントを、last nameの昇順でソートして取得するためには、以下のようなクエリーを実行します。

 db.users.find({}).sort({last_name: 1});

skip と limit

MongoDBは、 skiplimit を簡単なページ制御のためにサポートしています。次の例では、最初の20件をskipし、かつ、結果の件数を10件にlimitします。

 db.users.find({}, {}, 10, 20);

カーソル

find()によって実行されたデータベースクエリーは、技術的には カーソル を返します。カーソル はクエリーによって返されたドキュメントを順番の取得するために使われます。たとえば、 mongoシェル で、次のようにカーソルを使えます。

> var cur = db.example.find();
> cur.forEach( function(x) { print(tojson(x))});
{"n" : 1 , "_id" : "497ce96f395f2f052a494fd4"}
{"n" : 2 , "_id" : "497ce971395f2f052a494fd5"}
{"n" : 3 , "_id" : "497ce973395f2f052a494fd6"}
>

参照


Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.

IF YOU HAVE A QUESTION, POST IT TO THE USER GROUP.

These pages are fine for comments, but for questions, your best bet will always be the MongoDB User Group.

blog comments powered by Disqus