mongodb 数组怎么动态追加?-灵析社区

老詹啊老詹

例如现有数据结构: { id: 'a:0', msg: [] } `msg`数组长度最大为`10`,超出的时候,新建`id='a:1'`后再向`msg`追加数据

阅读量:200

点赞量:13

问AI
这个是node里的,用$push操作符: const { MongoClient } = require('mongodb'); async function appendMsg(tag, msg) { const client = new MongoClient('mongodb://localhost:27017', { useUnifiedTopology: true }); await client.connect(); try { const db = client.db('yourDatabaseName'); const collection = db.collection('yourCollectionName'); // 开始事务 const session = client.startSession(); session.startTransaction(); try { let doc = await collection.find({ tag: tag }).sort({ id: -1 }).limit(1).toArray(); doc = doc[0]; if (!doc) { doc = { id: `${tag}:0`, tag: tag, msg: [] }; await collection.insertOne(doc, { session }); } if (doc.msg.length < 10) { // 如果数组长度小于10,向数组中追加元素 await collection.updateOne({ id: doc.id }, { $push: { msg: msg } }, { session }); } else { // 如果数组长度达到10,创建新的文档并向其数组中追加元素 const newId = `${tag}:${parseInt(doc.id.split(':')[1]) + 1}`; const newDoc = { id: newId, tag: tag, msg: [msg] }; await collection.insertOne(newDoc, { session }); } // 提交事务 await session.commitTransaction(); } catch (err) { // 如果有错误,则中止事务 await session.abortTransaction(); throw err; } finally { // 结束会话 session.endSession(); } } finally { // 关闭连接 await client.close(); } } appendMsg('a', 'new message').catch(console.error);