studylog/北の雲

chainer/python/nlp

Mongoengineのcountの仕様

たまにハマるので

Userは100万人いるとする
user = User.objects().limit(100)

user.count() #=> 1000000
limitとかskipと一緒に使うと予想外の結果が返って来る可能性あり
limit(100)なんだから最大でも100なんだろうと期待してコード書くとマズい
あくまでobjectsの中のクエリ結果の件数を返してる模様

100を期待したければ、
User.objects.limit(100).count(with_limit_and_skip=True)) #=>これだと100になる

ちなみにバージョン0.8以降はlen(user)だと全件見ちゃって凄く時間かかって公式に非推奨です。0.7以前なら大丈夫だけど基本はcountで、だそうです。