0

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

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})

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

我想通过限制大小的索引字段来$order,你能帮我解释一下我想念什么吗?提前致谢!

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

原帖在这里

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

4

2 回答 2

0

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

影响每次向服务器请求获取多少文档,batchSize但不限制将返回的文档总数。

我认为你真正想要调用的是Limit()光标上类似于:

Cur = mongo:find (foo, {'$query', {}, '$orderby', {x,1}}, {'_id',0}).Limit(3)
于 2013-01-01T05:28:53.930 回答
0

我也没有在api中找到限制参数。我遇到了和你提到的一样的问题。但是我通过简单地返回结果来解决它,如果Counter达到Limit或返回结果,如果没有更多的结果。

于 2014-11-03T03:05:54.067 回答