// const { MongoClient } = require('mongodb'); var express = require('express'); var router = express.Router(); const querystring = require('querystring'); var us = { mongo: require('mongodb'), client: null // 用于存储 MongoClient 实例 }; // 初始化 MongoDB 连接 us.initMongoConnection = async function (host, database) { if (!us.client) { const url = host; // MongoDB 连接地址 us.client = new us.mongo.MongoClient(url, { useNewUrlParser: true, useUnifiedTopology: true, maxPoolSize: 10000, // 设置连接池没有上限 serverSelectionTimeoutMS: 5000, // 服务器选择超时 socketTimeoutMS: 45000 // 套接字超时 }); try { await us.client.connect(); } catch (err) { console.error("MongoDB 连接失败", err); throw err; // 抛出错误以便调用者处理 } } return us.client.db(database); // 返回数据库实例 } async function updateUserData(host, database, cename, data, res) { const db = await us.initMongoConnection(host, database); // 连接数据库 try { const collection = db.collection(cename); // collection设置 const dateKey = Object.keys(data)[0]; // 获取日期键 const username = Object.keys(data[dateKey])[0]; // 获取用户ID console.log(`更新用户数据:${username}`); // 使用 upsert 更新或插入文档 await collection.updateOne( { [dateKey]: { $exists: true } }, // 查询条件, [`${dateKey}.${username}`]: { $exists: true } { $push: { [`${dateKey}.${username}`]: data[dateKey][username] }, // 将用户数据推入数组 }, { upsert: true } // 如果没有数据,默认创建一条数据 ); console.log('数据更新成功'); res.end(JSON.stringify({ status: "1" })) } catch (err) { res.end(JSON.stringify({ status: "0" })) console.error('更新失败', err); } } async function updateUserData2(host, database, cename, data, res) { const db = await us.initMongoConnection(host, database); // 连接数据库 try { const collection = db.collection(cename); // collection设置 const dateKey = Object.keys(data)[0]; // 获取日期键 const userid = Object.keys(data[dateKey])[0]; const userData = data[dateKey][userid]; // 从 data 中提取 userData console.log(userData); // 使用 upsert 更新或插入文档 await collection.updateOne( { [dateKey]: { $exists: true } }, { $set: { // 设置其他字段 [`${dateKey}.${userid}`]: { username: userData.username, org: userData.org, school: userData.school, browser: userData.browser } }, // 先更新用户信息 }, { upsert: true } // 如果没有数据,默认创建一条数据 ); // 然后推送操作到 operation 数组 await collection.updateOne( { [dateKey]: { $exists: true } }, { $push: { [`${dateKey}.${userid}.operation`]: userData.operation } // 将用户数据推入数组 } ); console.log('数据更新成功'); res.end(JSON.stringify({ status: "1" })) } catch (err) { res.end(JSON.stringify({ status: "0", error: err.message })) // 返回错误信息 console.error('更新失败', err); } } /* { "2025-04-01": { "userid": { username: "", org: "", school: "", browser: "", operation:[ { "useTime":"", "loadTime":"", "object":"", "status":"error(报错信息)、正常就是success" } ] } } // 示例调用 updateUserData("mongodb://root:usestudio-1@123.58.32.151:11641?authSource=admin", "cocolog", "applog", { "2025-04-01": { "userid": { username: "", org: "", school: "", browser: "", operation: [ { "useTime": "", "loadTime": "", "object": "", "status": "error(报错信息)、正常就是success" } ] } } }); */ router.route('/updateUserData2').all((req, res, next) => { let today = new Date(); let date = today.getFullYear() + '-' + (today.getMonth() + 1).toString().padStart(2, '0') + '-' + today.getDate().toString().padStart(2, '0'); let data = req.body[0]; let decryptedData = {}; for (let key in data) { decryptedData[key] = decodeURIComponent(data[key]); } updateUserData2("mongodb://root:usestudio-1@172.16.9.240:27017?authSource=admin", "cocolog", "applog", { [date]: { [decryptedData.userid]: { userid: decryptedData.username, accountNumber: decryptedData.accountNumber, org: decryptedData.org, school: decryptedData.school, browser: decryptedData.browser, operation: [ { useTime: decryptedData.userTime, loadTime: decryptedData.loadTime, object: decryptedData.object, status: decryptedData.status, } ] } } }, res); }); router.route('/updateUserData').all((req, res, next) => { let today = new Date(); let date = today.getFullYear() + '-' + (today.getMonth() + 1).toString().padStart(2, '0') + '-' + today.getDate().toString().padStart(2, '0'); let data = req.body[0]; let decryptedData = {}; for (let key in data) { decryptedData[key] = decodeURIComponent(data[key]); } updateUserData("mongodb://root:usestudio-1@172.16.9.240:27017?authSource=admin", "cocolog", "applog", { [date]: { [decryptedData.username]: // 使用变量username作为键 { userid: decryptedData.userid, accountNumber: decryptedData.accountNumber, date: today, appname: decryptedData.appname, appid: decryptedData.appid, status: decryptedData.status } } }, res); }); queryString = function (url) { var a = url.split("?"); var json = querystring.parse(a[1]) return json; } module.exports = router;