限制大小无法通过使用 mongodb erlang 驱动程序的索引字段$orderby起作用



参考下面的示例,它可以查询有限大小的文档,

run () ->
application:start (mongodb),
{ok, Conn} = mongo:connect (localhost),
{ok, Docs} = mongo:do (safe, master, Conn, test, fun() ->
mongo:delete (foo, {}),
mongo:insert_all (foo, [{x,1}, {x,2}, {x,3}, {x,0}, {x,-1}]),
Cur = mongo:find (foo, {'$query', {}, '$orderby', {x,1}}, {'_id',0}, 0, 3),
mongo:rest (Cur) end),
mongo:disconnect (Conn),
[{x,-1}, {x,0}, {x,1}] = Docs.

但是如果我确保一个带x:的索引

db.foo.ensureIndex({x:1})

限制大小将无法按预期工作,查询将返回所有匹配的文档。

我想$orderby带有限制大小的索引字段,你能帮我解释一下我遗漏了什么吗?提前感谢!

BTW:目前官方的erlang驱动程序是重构的,我使用的erlang的驱动程序版本是0.2.1

原始帖子在这里

使用mongdb-erlang驱动程序查询返回错误结果?

查看mongo:find/5的语法,第五个参数似乎是"batchSize"而不是Limit。

batchSize会影响每次向服务器请求时提取的文档数量,但不会限制将返回的文档总数。

我认为您实际上想要调用的是光标上的Limit(),类似于:

Cur = mongo:find (foo, {'$query', {}, '$orderby', {x,1}}, {'_id',0}).Limit(3)

我也没有在api中找到极限参数。我遇到了和你提到的同样的问题。但如果Counter达到Limit,我只简单地返回结果,或者如果没有更多结果,我只返回结果。

最新更新