Lua 操作 MongoDB 資料庫例項

2021-08-11 08:27:41 字數 3718 閱讀 3252

最近有個工作是使用nginx + lua實現乙個操作mongodb資料庫的api,主要實現其count和query功能。之前沒有寫過lua,於是也就勉強著上手,在cloudwu的 lua-mongo 的基礎上實現了操作mongodb的api。

cloudwu的lua-mongo驅動實現了連線mongo,進行find和findone等基本操作的功能,所以在lua-mongo的基礎上增加了count和query等方法。修改的具體內容如下:

1、api基於luajit-2.0開發,相當於lua 5.1,需要使用lua-compat-5.2相容lua 5.2

2、使用ngx.socket.tcp替換mongo.socket模組

3、增加了count,query,auth等方法

修改之後的**見: lua-mongo

具體的操作mongodb的lua**如下:

複製**

**如下:

-- lua mongo test script

-- utils

function string:split(sep)

local sep, fields = sep or ":", {}

local pattern = string.format("([^%s]+)", sep)

self:gsub(pattern, function(c) fields[#fields + 1] = c end)

return fields

end-- 常量

host = "127.0.0.1"

port = 27017

keepalive_timeout = 60000

keepalive_size = 100

conn_timeout = 3000

db_user = "user"

db_passwd = "password"

db_name = "blog"

db_collection = "article"

-- 引用

mongo = require("mongo")

cjson = require("cjson.safe")

cbson = require("bson")

-- 狀態

local status_msg = "error"

local status_code = 500

local message = "unknown error"

local mongo_query = }, ["status"] = , ["create_time"] = }

local mongo_sort =

local mongo_limit = 100

local mongo_skip = 0

local mongo_fields =

-- 涉及到時間的字段,需要使用bson轉化一下

if mongo_query["create_time"] then

local create_time = mongo_query["create_time"]

local t = type(create_time)

if t == "table" then

for key, value in pairs(create_time) do

mongo_query["create_time"][key] = cbson.date(value)

endelse

mongo_query["create_time"] = cbson.date(create_time)

endend

local conn = mongo.client()

conn:set_timeout(conn_timeout)

local db = conn:getdb(db_name)

local reused_times = conn:get_reused_times()

if reused_times == 0 then

db:auth(db_user, db_passwd)

endlocal col = db:getcollection(db_collection)

local result = {}

-- count

local count, err = col:count(mongo_query)

local ok, err = conn:set_keepalive(keepalive_timeout, keepalive_size)

if count ~= nil then

result = count

status_code = 200

status_msg = "ok"

message = "success"

end-- query

local bson_obj

if mongo_sort then

bson_obj = cbson.encode_order("$query", mongo_query, "$orderby", mongo_sort)

else

bson_obj = cbson.encode()

endlocal results = col:query(bson_obj, mongo_fields, mongo_skip, mongo_limit)

local ok, err = conn:set_keepalive(keepalive_timeout, keepalive_size)

if results then

for _, object in pairs(results) do

for key, value in pairs(object) do

if value == cbson.null then

object[key] = cjson.null

else

local type_name, value = cbson.type(value)

object[key] = value

endend

endresult = results

status_code = 200

status_msg = "ok"

message = "success"

end-- findone

local results = col:findone()

local ok, err = conn:set_keepalive(keepalive_timeout, keepalive_size)

if results then

for key, value in pairs(results) do

if value == cbson.null then

results[key] = cjson.null

else

local type_name, value = cbson.type(value)

results[key] = value

endend

result = results

status_code = 200

status_msg = "ok"

message = "success"

endngx.status = status_code

json_out = cjson.encode()

ngx.header["content-length"] = json_out:len()

ngx.print(json_out)

MongoDB 資料庫操作

1 插入記錄 使用資料庫 如果沒有該資料庫就會建立,有就進入該模式 use use my testdb 插入資料 db.user.insert db.user.insert 顯示資料庫 show dbs my mongodb是隱式建立的資料庫 顯示表 show collections user是隱式...

java 操作MongoDB資料庫

建立了乙個mongodb的資料庫連線物件,它預設連線到當前機器的localhost位址,埠是27017 mongo mongo new mongo mongo mongo new mongo 127.0.0.1 27017 for string name mongo.getdatabasenames...

mongodb資料庫基本操作

一般來說,涉及到mongodb的操作主要有四種 增刪查改。nodejs可以很方便簡潔的實現這些操作。準備工作 連線mongodb伺服器 var server new mongodb.server localhost 27017,這裡server就指本地 localhost 的伺服器 連線伺服器上的資...