mongo.js 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. // const { MongoClient } = require('mongodb');
  2. var express = require('express');
  3. var router = express.Router();
  4. const querystring = require('querystring');
  5. var us = {
  6. mongo: require('mongodb'),
  7. client: null // 用于存储 MongoClient 实例
  8. };
  9. // 初始化 MongoDB 连接
  10. us.initMongoConnection = async function (host, database) {
  11. if (!us.client) {
  12. const url = host; // MongoDB 连接地址
  13. us.client = new us.mongo.MongoClient(url, {
  14. useNewUrlParser: true,
  15. useUnifiedTopology: true,
  16. maxPoolSize: 10000, // 设置连接池没有上限
  17. serverSelectionTimeoutMS: 5000, // 服务器选择超时
  18. socketTimeoutMS: 45000 // 套接字超时
  19. });
  20. try {
  21. await us.client.connect();
  22. } catch (err) {
  23. console.error("MongoDB 连接失败", err);
  24. throw err; // 抛出错误以便调用者处理
  25. }
  26. }
  27. return us.client.db(database); // 返回数据库实例
  28. }
  29. async function updateUserData(host, database, cename, data, res) {
  30. const db = await us.initMongoConnection(host, database); // 连接数据库
  31. try {
  32. const collection = db.collection(cename); // collection设置
  33. const dateKey = Object.keys(data)[0]; // 获取日期键
  34. const username = Object.keys(data[dateKey])[0]; // 获取用户ID
  35. console.log(`更新用户数据:${username}`);
  36. // 使用 upsert 更新或插入文档
  37. await collection.updateOne(
  38. { [dateKey]: { $exists: true } }, // 查询条件, [`${dateKey}.${username}`]: { $exists: true }
  39. {
  40. $push: { [`${dateKey}.${username}`]: data[dateKey][username] }, // 将用户数据推入数组
  41. },
  42. { upsert: true } // 如果没有数据,默认创建一条数据
  43. );
  44. console.log('数据更新成功');
  45. res.end(JSON.stringify({ status: "1" }))
  46. } catch (err) {
  47. res.end(JSON.stringify({ status: "0" }))
  48. console.error('更新失败', err);
  49. }
  50. }
  51. async function updateUserData2(host, database, cename, data, res) {
  52. const db = await us.initMongoConnection(host, database); // 连接数据库
  53. try {
  54. const collection = db.collection(cename); // collection设置
  55. const dateKey = Object.keys(data)[0]; // 获取日期键
  56. const userid = Object.keys(data[dateKey])[0];
  57. const userData = data[dateKey][userid]; // 从 data 中提取 userData
  58. console.log(userData);
  59. // 使用 upsert 更新或插入文档
  60. await collection.updateOne(
  61. { [dateKey]: { $exists: true } },
  62. {
  63. $set: {
  64. // 使用点符号逐个更新字段
  65. [`${dateKey}.${userid}.username`]: userData.username,
  66. [`${dateKey}.${userid}.org`]: userData.org,
  67. [`${dateKey}.${userid}.school`]: userData.school,
  68. [`${dateKey}.${userid}.browser`]: userData.browser,
  69. [`${dateKey}.${userid}.role`]: userData.role,
  70. }
  71. // 先更新用户信息
  72. },
  73. { upsert: true } // 如果没有数据,默认创建一条数据
  74. );
  75. // 然后推送操作到 operation 数组
  76. await collection.updateOne(
  77. { [dateKey]: { $exists: true } },
  78. {
  79. $push: { [`${dateKey}.${userid}.operation`]: { $each: userData.operation } } // 将用户数据推入数组
  80. },
  81. { upsert: true }
  82. );
  83. console.log('数据更新成功');
  84. res.end(JSON.stringify({ status: "1" }))
  85. } catch (err) {
  86. res.end(JSON.stringify({ status: "0", error: err.message })) // 返回错误信息
  87. console.error('更新失败', err);
  88. }
  89. }
  90. /*
  91. {
  92. "2025-04-01": {
  93. "userid": {
  94. username: "",
  95. org: "",
  96. school: "",
  97. browser: "",
  98. operation:[
  99. {
  100. "useTime":"",
  101. "loadTime":"",
  102. "object":"",
  103. "status":"error(报错信息)、正常就是success"
  104. }
  105. ]
  106. }
  107. }
  108. // 示例调用
  109. updateUserData2("mongodb://root:usestudio-1@123.58.32.151:11641?authSource=admin", "cocolog", "applog", {
  110. "2025-04-01": {
  111. "userid": {
  112. username: "1",
  113. org: "",
  114. school: "",
  115. browser: "",
  116. operation: [
  117. {
  118. "useTime": "",
  119. "loadTime": "",
  120. "object": "",
  121. "status": "error(报错信息)、正常就是success"
  122. }
  123. ]
  124. }
  125. }
  126. });
  127. */
  128. router.route('/updateUserData2').all((req, res, next) => {
  129. let today = new Date();
  130. let date = today.getFullYear() + '-' + (today.getMonth() + 1).toString().padStart(2, '0') + '-' + today.getDate().toString().padStart(2, '0');
  131. let data = req.body[0];
  132. if(!data.userid){
  133. res.end(JSON.stringify({ status: "无用户信息", json: req.body}))
  134. return;
  135. }
  136. let decryptedData = {};
  137. for (let key in data) {
  138. decryptedData[key] = decodeURIComponent(data[key]);
  139. }
  140. let json = {
  141. [date]: {
  142. [decryptedData.userid]:
  143. {
  144. username: decryptedData.username,
  145. accountNumber: decryptedData.accountNumber,
  146. org: decryptedData.org,
  147. school: decryptedData.school,
  148. browser: decryptedData.browser,
  149. role: decryptedData.role ? decryptedData.role : "",
  150. operation: [
  151. {
  152. useTime: decryptedData.userTime,
  153. loadTime: decryptedData.loadTime,
  154. endTime: decryptedData.endTime ? decryptedData.endTime : '',
  155. object: decryptedData.object,
  156. status: decryptedData.status,
  157. }
  158. ]
  159. }
  160. }
  161. }
  162. console.log(json);
  163. console.log(json[date][decryptedData.userid]['operation']);
  164. //172.16.9.240:27017
  165. //123.58.32.151:11641
  166. updateUserData2("mongodb://root:usestudio-1@172.16.9.240:27017?authSource=admin", "cocolog", "applog", json, res);
  167. });
  168. router.route('/updateUserData2P').all((req, res, next) => {
  169. let today = new Date();
  170. let date = today.getFullYear() + '-' + (today.getMonth() + 1).toString().padStart(2, '0') + '-' + today.getDate().toString().padStart(2, '0');
  171. let data = req.body;
  172. if(!data.userid){
  173. res.end(JSON.stringify({ status: "无用户信息", json: req.body}))
  174. return;
  175. }
  176. let decryptedData = {};
  177. for (let key in data) {
  178. decryptedData[key] = decodeURIComponent(data[key]);
  179. }
  180. let json = {
  181. [date]: {
  182. [decryptedData.userid]:
  183. {
  184. username: decryptedData.username,
  185. accountNumber: decryptedData.accountNumber,
  186. org: decryptedData.org,
  187. school: decryptedData.school,
  188. browser: decryptedData.browser,
  189. role: decryptedData.role ? decryptedData.role : "",
  190. operation: [
  191. {
  192. useTime: decryptedData.userTime,
  193. loadTime: decryptedData.loadTime,
  194. endTime: decryptedData.endTime ? decryptedData.endTime : '',
  195. object: decryptedData.object,
  196. status: decryptedData.status,
  197. }
  198. ]
  199. }
  200. }
  201. }
  202. console.log(json);
  203. console.log(json[date][decryptedData.userid]['operation']);
  204. //172.16.9.240:27017
  205. //123.58.32.151:11641
  206. updateUserData2("mongodb://root:usestudio-1@172.16.9.240:27017?authSource=admin", "cocolog", "applog", json, res);
  207. });
  208. router.route('/updateUserData').all((req, res, next) => {
  209. let today = new Date();
  210. let date = today.getFullYear() + '-' + (today.getMonth() + 1).toString().padStart(2, '0') + '-' + today.getDate().toString().padStart(2, '0');
  211. let data = req.body[0];
  212. let decryptedData = {};
  213. for (let key in data) {
  214. decryptedData[key] = decodeURIComponent(data[key]);
  215. }
  216. updateUserData("mongodb://root:usestudio-1@172.16.9.240:27017?authSource=admin", "cocolog", "applog", {
  217. [date]: {
  218. [decryptedData.username]: // 使用变量username作为键
  219. {
  220. userid: decryptedData.userid,
  221. accountNumber: decryptedData.accountNumber,
  222. date: today,
  223. appname: decryptedData.appname,
  224. appid: decryptedData.appid,
  225. status: decryptedData.status
  226. }
  227. }
  228. }, res);
  229. });
  230. queryString = function (url) {
  231. var a = url.split("?");
  232. var json = querystring.parse(a[1])
  233. return json;
  234. }
  235. module.exports = router;