MongoDBでカーソルがタイムアウトするのを防ぐ
色々調べてたけれど,全然情報がなかったので,メモっておく.
ちなみに,オフィシャルのページに書いてある方法は使えない・・・
http://docs.mongodb.org/manual/core/read-operations/
JavaScriptの場合は,cursorのaddOptionを使って,16を代入してやるとうまくいく.具体的には以下のような感じ.
var cur = db.servers.find().addOption(16);
C++の場合は次のようにする.
mongo::DBClientConnection mongo_conn; auto_ptr<mongo::DBClientCursor> cur = mongo_conn.query("DBname.collection", mongo::BSONObj(), 0, 0, 0, 16); // タイムアウトしないフラグ
16とかいうマジックナンバー,分かるわけ無いよ!こんなの絶対おかしいよ・・・
C++ DriverのAPIをみると,enum mongo::QueryOptions という enum があって,そこで,QueryOption_NoCursorTimeout = 1 << 4 と定義されている模様.
http://api.mongodb.org/cplusplus/current/namespacemongo.html#a7261673f7552ae9ee3a055f8f3962d8c