あるコレクションから、
まだ取得していなくて、
新しく追加されたドキュメントを取得したい
例えば、oidが、あるOIDまで取得している状態で、
db.test.find({_id:{$gt:ObjectId(OID)}}).sort({_id:-1}); db.test.find({_id:{$gt:ObjectId(OID)}}).sort({$natural:-1});などが思い当たりますよね。
ここでOIDは、4つに分けて
536700f5 80bedc 359f 275bc9
the seconds since the Unix epochとmachine identifierとprocess idとcounter
http://docs.mongodb.org/manual/reference/object-id/
らしいから、
これだと秒まで同じドキュメントが複数あって、それらが違うmachine idの場合に対応できないよね。
oidの2つ目のmachine idって
mongo localhost/test1 insert.js
536700f5 80bedc 359f 275bc9
mongo 127.0.0.1/test2 insert.js
536701af dc8c4c 3ebe 80a615
mongoシェルからやったら
53670229 daa151 cae9 41c342
みたいに
同じマシンでもinsertの仕方によっても違うし。
つまり、oidでsortしてもね。
ということで、1秒以内に書き込まれることを考慮したら、
.find({_id:{$gt:ObjectId(OID)}}).sort({_id:-1})では最新を取得できないよね?と思うのですよ。
ということでやっぱり自前のミリ秒くらいまでの時刻フィールド{ts : new Date()}を追加してそれで、
.find({ts:{$gt:timestamp}}).sort({ts:-1})
かつ取ってきたドキュメントでまた持ってないOIDだけに制限して使うことにするわ。
もっといいやり方ないんかね。
0 件のコメント:
コメントを投稿