You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.4 KiB
Lua
70 lines
1.4 KiB
Lua
local cbson = require("cbson")
|
|
local collection = require("resty.moongoo.collection")
|
|
local gridfs = require("resty.moongoo.gridfs")
|
|
|
|
local _M = {}
|
|
|
|
local mt = { __index = _M }
|
|
|
|
function _M.new(name, moongoo)
|
|
return setmetatable({name = name, _moongoo = moongoo}, mt)
|
|
end
|
|
|
|
function _M.collection(self, name)
|
|
return collection.new(name, self)
|
|
end
|
|
|
|
function _M.gridfs(self, name)
|
|
return gridfs.new(self,name)
|
|
end
|
|
|
|
function _M.cmd(self, cmd, params)
|
|
local r, err = self._moongoo:connect()
|
|
if not r then
|
|
return nil, err
|
|
end
|
|
return self:_cmd(cmd, params)
|
|
end
|
|
|
|
function _M._cmd(self, cmd, params)
|
|
local params = params or {}
|
|
if type(cmd) == "table" then
|
|
local tmpcmd = ''
|
|
for k,v in pairs(cmd) do
|
|
params[k] = v
|
|
tmpcmd = k
|
|
end
|
|
cmd = tmpcmd
|
|
else
|
|
params[cmd] = true
|
|
end
|
|
local cmd = cbson.encode_first(cmd, params)
|
|
|
|
local _,_,_,_,docs = self._moongoo.connection:_query(self.name..".$cmd", cmd, 0, 1)
|
|
|
|
if not docs[1] then
|
|
return nil, "Empty reply from mongodb"
|
|
end
|
|
|
|
if not docs[1].ok or docs[1].ok == 0 then
|
|
return nil, docs[1].errmsg
|
|
end
|
|
|
|
return docs[1]
|
|
end
|
|
|
|
function _M.insert(self, collection, docs)
|
|
local r, err = self._moongoo:connect()
|
|
if not r then
|
|
return nil, err
|
|
end
|
|
return self:_insert(collection, docs)
|
|
end
|
|
|
|
function _M._insert(self, collection, docs)
|
|
self._moongoo.connection:_insert(collection, docs)
|
|
return
|
|
end
|
|
|
|
|
|
return _M |