mongo.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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. /*
  52. // 示例调用
  53. updateUserData("mongodb://root:usestudio-1@123.58.32.151:11641?authSource=admin", "cocolog", "applog", {
  54. "2025-03-24": {
  55. "username":
  56. {
  57. userid: "",
  58. date: "",
  59. appname: "",
  60. status: ""
  61. }
  62. }
  63. });
  64. */
  65. //查找有无学校
  66. router.route('/updateUserData').all((req, res, next) => {
  67. // var json = queryString(req.url);
  68. let username = req.body[0].username
  69. let today = new Date();
  70. let date = today.getFullYear() + '-' + (today.getMonth() + 1).toString().padStart(2, '0') + '-' + today.getDate().toString().padStart(2, '0');
  71. // mongodb://root:usestudio-1@123.58.32.151:11641?authSource=admin
  72. updateUserData("mongodb://root:usestudio-1@172.16.9.240:27017?authSource=admin", "cocolog", "applog", {
  73. [date]: {
  74. [username]: // 使用变量username作为键
  75. {
  76. userid: req.body[0].userid,
  77. date: today,
  78. appname: req.body[0].appname,
  79. appid: req.body[0].appid,
  80. status: req.body[0].status
  81. }
  82. }
  83. }, res);
  84. // console.log(json);
  85. // res.end(JSON.stringify([{ status: "0" }]));
  86. });
  87. queryString = function (url) {
  88. var a = url.split("?");
  89. var json = querystring.parse(a[1])
  90. return json;
  91. }
  92. module.exports = router;