当前位置: 首页 > 知识库问答 >
问题:

前端 - mongodb 数组怎么动态追加?

连文栋
2023-09-19

例如现有数据结构:

{    id: 'a:0',    msg: []}

msg数组长度最大为10,超出的时候,新建id='a:1'后再向msg追加数据

共有2个答案

咸育
2023-09-19

这个是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);
司寇安宜
2023-09-19

对于如何在 MongoDB 中动态追加数组元素的问题,有多种方法可以实现。这里提供一种使用 MongoDB 聚合管道中的 $pushAll 操作符的方法,以实现动态追加。

假设你有一个名为 messages 的集合,其中包含以下文档:

{  _id: ObjectId("5d416c2820a9945466b00000d"),  id: 'a:0',  msg: [1, 2, 3, 4, 5]}

要向 msg 数组中追加元素,可以使用以下聚合管道:

db.messages.aggregate([  {    $addFields: {      msg: { $concatArrays: [ "$msg", [6, 7, 8, 9, 10] ] }    }  }])

这将创建一个新的字段 msg,其值为 msg 数组与新元素 [6, 7, 8, 9, 10] 的组合。注意,这里的 [6, 7, 8, 9, 10] 是你要追加的元素。如果需要追加更多的元素,只需添加更多的数组即可。

 类似资料:
  • 这里 div怎么写动态class呢 ? 这么写会报错

  • 我这样写,test和img是有图片的,但是中间的两个div就一点效果都没有,也不报错。不知道是哪里的问题,网上有说使用require的,但是require在用的时候会报错require is not defined,不过原理应该也是转成一个url吧,这里试了一下也不行,这种背景图应该怎么加才对?

  • 这里定义了一个函数式组件,怎么在使用它的时候,添加一个默认的class='text'?如下:

  • 使用方法:进入动态-发布动态-发布

  • array.h #include<stdio.h> #include<stdlib.h> struct data { int *p;//指针保存数组的起始点 int length;//保存数组的长度 int stat;//0代表无序,1代表有序从小到大,2有序从大到小 int reallength;//实际分配的内存长度 };

  • 本文向大家介绍怎样动态导入组件?相关面试题,主要包含被问及怎样动态导入组件?时的应答技巧和注意事项,需要的朋友参考一下 自己使用 import 和 async/await 实现的异步组件 React.lazy 开源库 react-loadable 库/react-lazyload 库 babel 动态导入(Dynamic Import)