【node】MongoDB根据指定的文档id和层级对象id里的数组更新数据($push,$set, .....)

首先我们总得下载mongo的库吧哈哈哈,以防有萌新看到帖子然后不知道

要在Node.js中使用MongoDB,您需要安装MongoDB Node.js驱动程序。您可以通过以下步骤来下载和安装MongoDB Node.js驱动程序:

  1. 打开终端或命令提示符。
  2. 进入您的项目目录。
  3. 运行以下命令来初始化npm(如果尚未初始化):
    npm init
    
  4. 之后,运行以下命令来安装MongoDB Node.js驱动程序:
    npm install mongodb
    

完成上述步骤后,您将成功下载并安装了MongoDB Node.js驱动程序。

接下来,在您的Node.js代码中,您可以使用require语句导入已安装的库。例如:


const MongoClient = require('mongodb').MongoClient;

然后,您可以使用MongoClient对象与MongoDB进行连接,并执行各种数据库操作。

请注意,为了成功连接到MongoDB数据库,请确保已经正确配置了连接字符串、主机名、端口号和凭据(如果适用)。

首先这是我的数据库结构:

{ //文档对象
    id: ObjectId('1913249165465165f5zx6ca4s')
    commodityclass:[ //数组
        { //对象
            ClassId: 1     //数字类型的哦
            commodity: [ //数组

                { //对象1
                    GOODSID:101,
                    RMB:99.99
                },
                { //对象2
                    GOODSID:102,
                    RMB:99.99
                }

            ]
        },
        {
            ClassId: 2     //数字类型的哦
            commodity: [ //数组

                { //对象1
                    GOODSID:101,
                    RMB:99.99
                },
                { //对象2
                    GOODSID:102,
                    RMB:99.99
                }

            ]
        }
    ]

}

在node建立连接你的mongo数据库

const MongoClient = require('mongodb').MongoClient;
//填自己的服务器mongo的账号和密码和端口号哦,我的mongo是自己的服务器里的!
const uri = "mongodb://账号:密码@localhost:端口号/?authSource=admin"
//这是可以找到文档id的关键哦,就是使用ObjectId 
const { ObjectId } = require('mongodb');


// 连接数据库的选项
const options = {
    useNewUrlParser: true,
    useUnifiedTopology: true,
};


//我的形参分别是dbName:数据库的名字,collectionName集合的名字,documentId:要指定的文档的id,classId: 要指定的id,newData要更新的数据

const upgoodsData = function (dbName, collectionName, documentId, classId, newData) {
    return new Promise((resolve, reject) => {
        MongoClient.connect(uri, options, async function (err, client) {
            if (err) {
                return reject(err);
            }
            try {
                const collection = client.db(dbName).collection(collectionName);

                // 查询对应的id的文档和类id是不是存在再进行操作!更安全
                const category = await collection.find({ "_id": ObjectId(documentId),                 "ClassId": classId });
                if (!category) {
                    throw new Error('找不到指定的商品类!');
                }

                // 更新文档,将新数据添加到指定类ID的商品数组中
                const DataPush = await collection.updateOne({ "_id": ObjectId(documentId), "commodityclass.ClassId": classId }, {$push: { "commodityclass.$.commodity": newData }});

                resolve(DataPush);

            } catch (error) {
                reject(error);
            } finally {
                client.close();
            }
        });
    });
}


//做模块导出供接口代码导入使用
module.exports = {
    upgoodsData
}

主要在这个代码的构成哦!

collection.updateOne({ "_id": ObjectId(documentId), "commodityclass.ClassId": classId }, {$push: { "commodityclass.$.commodity": newData }});

collection.updateOne({

{  要查询的条件添加  } ,

{  要操作的方式加对应的数组字段和数据  }

})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值