From 8de6500677e1d85ba814fc126312d4f1120c4df4 Mon Sep 17 00:00:00 2001 From: xjdrew Date: Wed, 2 May 2018 00:01:13 +0800 Subject: [PATCH 1/2] update mongo driver: safe_insert, safe_update, safe_delete --- lualib/skynet/db/mongo.lua | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/lualib/skynet/db/mongo.lua b/lualib/skynet/db/mongo.lua index c28766af..7522da20 100644 --- a/lualib/skynet/db/mongo.lua +++ b/lualib/skynet/db/mongo.lua @@ -340,8 +340,23 @@ function mongo_collection:insert(doc) sock:request(pack) end +local function werror(r) + local ok = (r.ok == 1 and not r.writeErrors and not r.writeConcernError) + + local err + if not ok then + if r.writeErrors then + err = r.writeErrors[1].errmsg + else + err = r.writeConcernError.errmsg + end + end + return ok, err, r +end + function mongo_collection:safe_insert(doc) - return self.database:runCommand("insert", self.name, "documents", {bson_encode(doc)}) + local r = self.database:runCommand("insert", self.name, "documents", {bson_encode(doc)}) + return werror(r) end function mongo_collection:batch_insert(docs) @@ -363,12 +378,30 @@ function mongo_collection:update(selector,update,upsert,multi) sock:request(pack) end +function mongo_collection:safe_update(selector, update, upsert, multi) + local r = self.database:runCommand("update", self.name, "updates", {bson_encode({ + q = selector, + u = update, + upsert = upsert, + multi = multi, + })}) + return werror(r) +end + function mongo_collection:delete(selector, single) local sock = self.connection.__sock local pack = driver.delete(self.full_name, single, bson_encode(selector)) sock:request(pack) end +function mongo_collection:safe_delete(selector, single) + local r = self.database:runCommand("delete", self.name, "deletes", {bson_encode({ + q = selector, + limit = single and 1 or 0, + })}) + return werror(r) +end + function mongo_collection:findOne(query, selector) local conn = self.connection local request_id = conn:genId() From 003b0fdb02ca75c1511f1d12782f82c0a09c0a4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=91=E9=A3=8E?= Date: Thu, 3 May 2018 23:26:53 +0800 Subject: [PATCH 2/2] Add logo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0991e585..7040656f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -## Skynet +## ![skynet logo](https://github.com/cloudwu/skynet/wiki/image/skynet_metro.jpg) Skynet is a lightweight online game framework, and it can be used in many other fields.