This project is forked from https://github.com/bigplum/lua-resty-mongol with modifications and additions.
Now you can pass connection parameters opt
to control the connection behavior. This is crucial when using connection pools, for example:
conn:connect(host, port, {pool_size = POOL_MAX, backlog = POOL_BACKLOG})
See https://www.mongodb.com/docs/v4.4/reference/method/db.createView/
Using the above two commands, you can create any functionality you want. See: https://www.mongodb.com/docs/v4.4/reference/command/
See: https://www.mongodb.com/docs/v4.4/reference/method/db.aggregate/
Example:
See: https://www.mongodb.com/docs/v4.4/reference/method/db.collection.createIndex/
The above features now exhibit the expected behavior.
lua-resty-mongol - Lua Mongodb driver for ngx_lua base on the cosocket API
Thanks to project Mongol by daurnimator
luajit(or attempt to yield across metamethod/C-call boundary error
will be produced.)
ngx_lua 0.5.0rc5 or ngx_openresty 1.0.11.7 is required.
make install
Add package path into nginx.conf.
lua_package_path '/usr/local/openresty/lualib/?/init.lua;;';
or into lua files before requiring.
local p = "/usr/local/openresty/lualib/"
local m_package_path = package.path
package.path = string.format("%s?.lua;%s?/init.lua;%s",
p, p, m_package_path)
Requring the module will return a function that connects to mongod: it takes a host (default localhost) and a port (default 27017); it returns a connection object.
mongol = require "resty.mongol"
conn = mongol:new() -- return a conntion object
Default host and port is: localhost
and 27017
.
Sets socket connecting, reading, writing timeout value, unit is milliseconds.
In case of success, returns 1. In case of errors, returns nil with a string describing the error.
Keeps the socket alive for msec
by ngx_lua cosocket.
In case of success, returns 1. In case of errors, returns nil with a string describing the error.
Returns the socket reused times.
In case of success, returns times. In case of errors, returns nil with a string describing the error.
Closes the connection.
In case of success, returns 1. In case of errors, returns nil with a string describing the error.
Returns a boolean indicating if this is the master server and a table of other hosts this server is replicating with
or nil, err
on failure.
Returns a new connection object that is connected to the primary server
or nil , errmsg
on failure.
The returned connection object may be this connection object itself.
Returns a table describing databases on the server.
databases.name: string
databases.empty: boolean
databases.sizeOnDisk: number
Shutsdown the server. Returns nothing.
Returns a database object, or nil.
Returns 1 in case of success, or nil with error message.
Returns a collection object for more operations.
Returns 1 in case of success, or nil with error message.
Returns number of rows been updated or nil for error.
- upsert, if set to
1
, the database will insert the supplied object into the collection if no matching document is found, default to0
. - multiupdate, if set to
1
, the database will update all matching objects in the collection. Otherwise only updates first matching doc, default to0
. Multi update only works with $ operators. - safe can be a boolean or integer, defaults to
0
. If1
, the program will issue a cmdgetlasterror
to server to query the result. Iffalse
, return valuen
would always be-1
Returns 0 for success, or nil with error message.
- continue_on_error, if set, the database will not stop processing a bulk insert if one fails (eg due to duplicate IDs).
- safe can be a boolean or integer, defaults to
0
orfalse
. If1
or ``true, the program will issue a cmd
getlasterror` to server to query the result. If `false`, return value `n` would always be `-1`
Returns number of rows been deleted, or nil with error message.
- singleRemove if set to 1, the database will remove only the first matching document in the collection. Otherwise all matching documents will be removed. Default to
0
- safe can be a boolean or integer, defaults to
0
. If1
, the program will issue a cmdgetlasterror
to server to query the result. Iffalse
, return valuen
would always be-1
Returns a single element array, or nil.
- returnfields is the fields to return, eg:
{n=0}
or{n=1}
Returns a cursor object for excuting query.
- returnfields is the fields to return, eg:
{n=0}
or{n=1}
- num_each_query is the max result number for each query of the cursor to avoid fetch a large result in memory, must larger than
1
,0
for no limit, default to100
.
- cursorID is an 8 byte string representing the cursor to getmore on
- numberToReturn is the number of results to return, defaults to -1
- offset_i is the number to start numbering the returned table from, defaults to 1
Returns the next item and advances the cursor.
A handy wrapper around cursor:next() that works in a generic for loop:
for index, item in cursor:pairs() do
Limits the number of results returned.
Returns an array with size size
sorted by given field.
- field is an array by which to sort, and this array size MUST be 1. The element in the array has as key the field name, and as value either
1
for ascending sort, or-1
for descending sort. - num is the temp array size for sorting, default to
10000
.
under developing
Returns a gridfs file object.
Returns number of files been deleted, or nil with error message.
- singleRemove if set to 1, the database will remove only the first matching document in the collection. Otherwise all matching documents will be removed. Default to
0
- safe can be a boolean or integer, defaults to
0
. If1
, the program will issue a cmdgetlasterror
to server to query the result. Iffalse
, return valuen
would always be-1
Writes first object matchs fields into file_handler. This API will malloc a buffer in file size in memory.
Returns 0 for success, or nil with error message.
- file_handler is file handler returned by io:open().
- meta is a table include
_id, filename, chunkSize, contentType, aliases, metadata
or anything the user wants to store. Default meta.filename is the object id in string. - safe can be a boolean or integer, defaults to
0
. If1
, the program will issue a cmdgetlasterror
to server to query the result. Iffalse
, return valuen
would always be-1
Returns a new gridfs file object, or nil with error message.
- meta is a table include
_id, filename, chunkSize, contentType, aliases, metadata
or anything the user wants to store. Default meta.filename is the object id in string.
Returns number of bytes read from mongodb, or nil with error message.
- offse start from 0
Returns number of bytes writen into mongodb, or nil with error message.
- offset is the file offset(should not beyond the end of the file), starting from 0.
- size is the number of bytes to be writen.
Hashs the file content and updates the md5 in file collection.
- collections are string containing any value except "\0"
- database_name are strings containing any character except "." and "\0"
- Auth bson message has reduntant value.
- Could not inserting a null array, it always inserted as a document.
- Gridfs_new api only create a meta info in file_col.
local mongo = require "resty.mongol"
conn = mongo:new()
conn:set_timeout(1000)
ok, err = conn:connect()
if not ok then
ngx.say("connect failed: "..err)
end
local db = conn:new_db_handle ( "test" )
col = db:get_col("test")
r = col:find_one({name="dog"})
ngx.say(r["name"])
> config = {_id: 'testset', members: [
{_id: 0, host: '10.6.2.51:27017'},
{_id: 1, host: '10.6.2.51:27018'},
{_id: 2, host: '10.6.2.51:27019'}]
}
> rs.initiate(config);
nohup bin/mongod --dbpath=/data/57cbd36d-5b70-4888-8537-bea71119363e/mongodb --oplogSize 10 --rest --replSet testset --port 27017 --keyFile key.file &
nohup bin/mongod --dbpath=/data/0a9419ae-4ec3-48c2-ad8d-df68a09aed13/mongodb --oplogSize 10 --rest --replSet testset --port 27018 --keyFile key.file &
nohup bin/mongod --dbpath=/data/8ee9efc0-a854-4c45-8893-7b4cb9ed0e5f/mongodb --oplogSize 10 --rest --replSet testset --port 27019 --keyFile key.file &
> use test
> db.addUser("admin","admin")