resty-mongo 踩过的坑

最近在用 nginx + lua + mongodb 做一个小项目,踩了里面不少坑,先做记录如下:

1、local m = mongol:new()
一个db只能用一个实例,所以有多个db需要实例化多次

2、用户名密码
要使用db:auth来做,连接多个db,要使用多个
local ok, err = db:auth(mongoConn.dbUser, mongoConn.dbPwd)

3、游标的使用
要通过如下代码使用游标
for index, item in cursor:pairs() do

end

4、用完记得归还
local ok, err = m:set_keepalive(mongoConn.max_idle_timeout, mongoConn.pool

5、aggregate的巨坑
aggregate返回的结果是大致如下:
{
“ok”:1,
“result”:[…]
}
我开始做的时候,根据 #result 获取数组长度,每次都比直接在mongoshell执行命令要少1,原因就在于lua的数组是从1开始的,而mongodb返回的数组第一个下标是0,后来追踪了半天的 resty-mongo 源码,终于发现其实数据没有丢,要这样循环取出数据:
for key, v in pairs(result) do

end
注意,这里千万不能使用 ipairs ,这样会少一个结果。