|
based on 21 (2010-10-04更新) - オリジナル MongoDBのクエリはカーソルを返します。そして、取得したカーソルで結果をイテレートすることができます。クエリの正しい方法は言語のドライバによって変わります。下記の詳細は、 MongoDBシェル からの実行(つまり mongo プロセス)に焦点を当てています。 シュルの find() メソッドはカーソルオブジェクトを返し、結果のドキュメントをイテレートすることができます。 このために、 hasNext() と next() メソッドを使います。 for( var c = db.parts.find(); c.hasNext(); ) { print( c.next()); } 加えて、シェルの中では、 forEach() をカーソルと使うことができます。 db.users.find().forEach( function(u) { print("user: " + u.name); } );
シェルの中で配列モードJavaScriptなどのいくつかの言語では、ドライバは"配列モード"をサポートしています。詳しくはドライバードキュメントを確認してください。 シェルでは、カーソルを配列モードで使うために、配列のインデックス [] 操作と、 length プロパティを使います。 配列モードでは、インデックスで要求された値までのすべてのデータを、RAMにロードします。そのためとても大きな量のデータを返すようなクエリに対しては 使わない でください。out of memory になってしまいます。 また、カーソルに対し toArray() を呼ぶこともできます。 toArray() はすべてのオブジェクトをRAMにロードします。 1つのアイテムの取得1つのアイテムを取得するためには、 findOne() を使います。一つも見つからない場合には Null が返されます。 findOne() は以下の等価と等化です。 function findOne(coll, query) {
var cursor = coll.find(query).limit(1);
return cursor.hasNext() ? cursor.next() : null;
}
Tip: マッチした複数行に対して一つだけ必要な場合、 findOne() は、 limit() 操作を実行し、結果を制限するので効率的です。 組み込みオブジェクトに対するクエリー組み込みオブジェクト全体に完全にマッチするものを探すのは、単純に、 db.order.find( { shipping: { carrier: "usps" } } );
このクエリーでは、shipping オブジェクト内に含まれる { carrier: "usps" } と完全にマッチするのみが該当します。 shipping.carrier == "usps" にマッチするサブオブジェクトすべてを取得したい場合には、以下の文法を使ってください。 db.order.find( { "shipping.carrier" : "usps" } );
詳しい情報は、 ドット表記 ドキュメントを参照してください。 大きい、小さい (Greater Than / Less Than)db.myCollection.find( { a : { $gt : 3 } } );
db.myCollection.find( { a : { $gte :3 } } );
db.myCollection.find( { a : { $lt :3 } } );
db.myCollection.find( { a : { $lte :3 } } ); // a <= 3
latentカーソルとスナップショットlatentカーソルは (最初のアクセスからの) データベースに対する書き込み操作(insert/update/delete)が影響します。多くの状況で、データベースはこれらの操作をサポートします。 概念的に、カーソルは現在のポジションを持っています。現在のポジションのアイテムが削除された場合には、カーソルは自動的に次のアイテムへ進みます。 MongoDBのカーソルはスナップショットではありません。他の書き込みがカーソルが存在している間に発生した場合、その書き込みがカーソルに現れるかもしれませんし、現れないかもしれません。 詳しい情報は、 snapshot を参照してください。 確保されているカーソルのチェック確保されているカーソルの情報は、 {cursorInfo:1} コマンドで取得することができます。 db.runCommand({cursorInfo:1})
参照 |

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