MongoDBのクエリからより多くの結果があるかどうかを知るにはどうすればよいですか?
質問
Mongoを制限で照会するための好ましい方法はありますか?SKIP/LIMITで次のページをクエリすると、より多くの結果が発生するかどうかを知ることができますか?
私がやっているのは、必要以上のドキュメントを要求し、最後からスライスし、その追加文書の存在を使用して、別のクエリが少なくとも1つの結果を与えるかどうかを知ることです。
n = 10
docs = db.documents.find({'foo': 'bar'}).limit(n+1)
more = docs.count() > n
docs = docs[:n]
これは一般的なユースケースであると感じています(ウェブサイトに「より多くの結果」ボタンを表示するかどうかを知る)、私は現在の解決策で愚かだと感じています。
解決
mongodbは持っています テーラブルカーソル, 、これにより、すべてのデータが返された後、カーソルを再利用できます。それは次のようになります:
n = 10
docs = db.documents.find({"foo": "bar"}).limit(n)
more = docs.hasNext()
取得したドキュメントは10個しかありませんが、カーソルを検査して、より多くのオブジェクトが利用できるかどうかを判断できることに注意してください。唯一の問題は、テーラブルカーソルがキャップコレクションでのみ使用できることです。
上記は通常のカーソルでも使用できますが、 n + 1
ドキュメント。これは基本的にあなたが今使用しているのと同じソリューションです。使用する必要があります size()
ただし、それがスキップを使用し、修飾子を制限します。
n = 10
docs = db.documents.find({"foo": "bar"}).limit(n + 1)
more = db.size() > n
私はピモンゴに精通していないので、私はこれを確実に知りませんが、このソリューションが送信する可能性があります n + 1
必要なものではなく、アプリケーションへの完全な文書 n
, 、マイナー帯域幅のオーバーヘッドをもたらします。その場合、同じことを行うが、含むオブジェクトを返すサーバー側の関数を作成することをお勧めします n
配列内のドキュメント、および n + 1
th ドキュメントが利用可能です。