mongoDB

mongoDBのcount正しくない問題

mongoDBでは、シャーディングされたコレクションのcountが正しい値を返さないことがあります。これには2つの原因があります。 チャンク移動中である 孤児ドキュメントが存在する 1は、チャンク移動中は正しい値が帰らないということです。シャード間でデータ…

cursorを回しつつupdateすると同じドキュメントが二回更新される

mongoDBでcursorでコレクションを取得しつつupdateすると、同じドキュメントが二回updateされたり、全くされなかったりすることがあるようだ。 たとえば次のようなクエリをmongoシェルから流すと db.Hoge.find().forEach(function(result) { db.Hoge.update(…

launchdでmongoDBを自動起動

以下のようなplistを書いて ~/Library/LaunchAgent/local.mongodb.plist に保存。 <plist version="1.0"> <dict> <key>KeepAlive</key> <false/> <key>RunAtLoad</key> <true/> <key>La…</key></true/></false/></dict></plist>

mongoDBとMySQLのlimit offset skip

mongoDBにはMySQLのoffset limitに似たskip limitという機能がありますが、名前だけでなく機能的にも差異があります。意外と知られていないようなのですが、MySQLでは以下のようなSQLで最初の10件を取り出す場合でもテーブルフルスキャンされてしまいます。 …

mongoDBでだいたい新しい順番にドキュメントを取得する

mongoDBのコレクションにはnatural orderという概念があります。sortせずにfindするとインサートされた時間が古いものから順番に取得されますが、この並び順がnatural order。新しい順にドキュメントを取得したい場合は sort に { $natural: -1 } と指定すれ…