是否有一种首选的方法来查询蒙古的限制,并且如果我使用跳过/限制查询下一页,是否会有更多结果?

我一直在做的是要求一份比我需要的文档多,将其切成薄片,并使用该额外的文档来知道其他查询是否至少会产生一个结果。

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

我不熟悉Pymongo,所以我不确定这一点,但是这个解决方案可能会发送 n + 1 您应用程序的完整文件,而不是所需的 n, ,导致较小的带宽开销。如果是这样,您可能需要创建一个执行相同功能的服务器端函数,但仅返回一个包含的对象 n 数组中的文档和一个标志,指示是否 n + 1Th 可以使用文档。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top