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