Node.js中操作MongoDB的CRUD操作指南

 更新时间:2024年01月14日 08:31:50   作者:慕仲卿  
在Node.js中操作MongoDB常见的库有mongodb原生驱动和mongoose等,本文将使用mongodb官方驱动包来进行示例,在开始之前,请确保已经安装了MongoDB数据库并且在本地启动了MongoDB服务,需要的朋友可以参考下

首先,需要安装mongodb驱动:

npm install mongodb

接着,可以创建一个连接到MongoDB的客户端:

const { MongoClient } = require('mongodb');

const url = 'mongodb://localhost:27017';  // MongoDB服务地址
const dbName = 'mydatabase';  // 数据库名称
const client = new MongoClient(url);

async function main() {
    await client.connect();
    console.log('Connected successfully to server');
    const db = client.db(dbName);
    
    // 等待在这里执行CRUD操作

    client.close();
}

main().catch(console.error);

基础版

1. 创建(Create)

插入单条数据

async function createDocument(collectionName, doc) {
    const collection = db.collection(collectionName);
    const result = await collection.insertOne(doc);
    console.log(result);
}

// 使用示例
createDocument('users', { name: 'Tom', age: 25 });

插入多条数据

async function createMultipleDocuments(collectionName, docs) {
    const collection = db.collection(collectionName);
    const result = await collection.insertMany(docs);
    console.log(result);
}

// 使用示例
createMultipleDocuments('users', [
    { name: 'Alice', age: 23 },
    { name: 'Bob', age: 27 }
]);

2. 读取(Read)

查询单条数据

async function findOneDocument(collectionName, query) {
    const collection = db.collection(collectionName);
    const doc = await collection.findOne(query);
    console.log(doc);
}

// 使用示例
findOneDocument('users', { name: 'Tom' });

查询多条数据

async function findMultipleDocuments(collectionName, query) {
    const collection = db.collection(collectionName);
    const docs = await collection.find(query).toArray();
    console.log(docs);
}

// 使用示例
findMultipleDocuments('users', { age: { $gt: 20 } });

3. 更新(Update)

更新单条数据

async function updateOneDocument(collectionName, filter, updateDoc) {
    const collection = db.collection(collectionName);
    const result = await collection.updateOne(filter, { $set: updateDoc });
    console.log(result);
}

// 使用示例
updateOneDocument('users', { name: 'Tom' }, { age: 28 });

更新多条数据

async function updateMultipleDocuments(collectionName, filter, updateDoc) {
    const collection = db.collection(collectionName);
    const result = await collection.updateMany(filter, { $set: updateDoc });
    console.log(result);
}

// 使用示例
updateMultipleDocuments('users', { age: { $lt: 30 } }, { active: true });

4. 删除(Delete)

删除单条数据

async function deleteOneDocument(collectionName, query) {
    const collection = db.collection(collectionName);
    const result = await collection.deleteOne(query);
    console.log(result);
}

// 使用示例
deleteOneDocument('users', { name: 'Tom' });

删除多条数据

async function deleteMultipleDocuments(collectionName, query) {
    const collection = db.collection(collectionName);
    const result = await collection.deleteMany(query);
    console.log(result);
}

// 使用示例
deleteMultipleDocuments('users', { active: true });

完成上面的操作后,确保关闭数据库连接。

client.close();

在使用以上代码时,请通过替换collectionNamequeryupdateDoc的值以适配你的实际需求。

这个指南涵盖了在Node.js中使用MongoDB进行基本的CRUD操作的代码示例。在实际应用开发中,你可能需要根据实际业务逻辑对其进行更复杂的操作和封装。

在MongoDB中执行更高级的查询和修改操作通常涉及更复杂的查询条件、聚合操作以及对更新操作的细致控制。我将在此为您提供一些进阶使用示例。

进阶版

高级查询

查询时可以使用更复杂的操作符,比如$and$or$in$not$type$regex等来构建复杂的查询语句。

使用逻辑运算符

async function findWithLogicalOperators(collectionName) {
    const collection = db.collection(collectionName);
    // 查询年龄大于20并且名字以'A'开头的用户
    const query = { $and: [{ age: { $gt: 20 } }, { name: { $regex: /^A/ } }] };
    const docs = await collection.find(query).toArray();
    console.log(docs);
}

findWithLogicalOperators('users');

使用数组查询

async function findUsersWithSpecificInterests(collectionName) {
    const collection = db.collection(collectionName);
    // 查询兴趣中包含阅读的用户
    const query = { interests: "阅读" };
    const docs = await collection.find(query).toArray();
    console.log(docs);
}

findUsersWithSpecificInterests('users');

使用聚合框架(Aggregation Framework)

MongoDB提供的聚合框架可以执行更复杂的数据处理任务,比如分组、排序、计算字段等。

分组和计算平均年龄

async function averageAgeByInterest(collectionName) {
    const collection = db.collection(collectionName);
    const pipeline = [
        { $unwind: "$interests" },
        { $group: { _id: "$interests", averageAge: { $avg: "$age" } } },
        { $sort: { averageAge: -1 } }
    ];
    const result = await collection.aggregate(pipeline).toArray();
    console.log(result);
}

averageAgeByInterest('users');

高级更新

更新操作可以包括修改字段、添加新字段以及使用更新操作符如$inc$push等。

更新并同时增加新字段

async function updateAndAddField(collectionName, userId, incrementValue) {
    const collection = db.collection(collectionName);
    const filter = { _id: userId };
    const updateDoc = {
        $set: { lastActive: new Date() },
        $inc: { loginCount: incrementValue }
    };
    const result = await collection.updateOne(filter, updateDoc);
    console.log(result);
}

updateAndAddField('users', "someUserId", 1);

向数组中添加元素

async function addInterestToUser(collectionName, userId, newInterest) {
    const collection = db.collection(collectionName);
    const filter = { _id: userId };
    const updateDoc = { $push: { interests: newInterest } };
    const result = await collection.updateOne(filter, updateDoc);
    console.log(result);
}

addInterestToUser('users', "someUserId", "游泳");

删除操作

删除操作同样可以是条件化的,你可以根据条件批量删除记录。

删除年龄在一定范围内的用户

async function deleteUserByAgeRange(collectionName, minAge, maxAge) {
    const collection = db.collection(collectionName);
    const query = { age: { $gte: minAge, $lte: maxAge } };
    const result = await collection.deleteMany(query);
    console.log(result);
}

deleteUserByAgeRange('users', 18, 30);

以上就是Node.js中操作MongoDB的CRUD操作指南的详细内容,更多关于Node.js操作MongoDB的CRUD的资料请关注脚本之家其它相关文章!

相关文章

  • NodeJS 基于 Dapr 构建云原生微服务应用快速入门教程

    NodeJS 基于 Dapr 构建云原生微服务应用快速入门教程

    Dapr 是一个可移植的、事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的、无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言和开发框架,本文重点介绍NodeJS云原生微服务应用,感兴趣的朋友一起看看吧
    2022-07-07
  • 解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题

    解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题

    这篇文章主要介绍了解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306报错的相关资料,文中将问题描述的很清楚,解决的方法也介绍的很完整,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-03-03
  • Nodejs+Socket.io实现通讯实例代码

    Nodejs+Socket.io实现通讯实例代码

    本篇文章主要介绍了Nodejs+Socket.io实现通讯实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • Node.js API详解之 timer模块用法实例分析

    Node.js API详解之 timer模块用法实例分析

    这篇文章主要介绍了Node.js API详解之 timer模块用法,结合实例形式分析了Node.js API中timer模块基本功能、原理、用法及操作注意事项,需要的朋友可以参考下
    2020-05-05
  • Node配合WebSocket做多文件下载以及进度回传

    Node配合WebSocket做多文件下载以及进度回传

    这篇文章主要介绍了Node配合WebSocket做多文件下载以及进度回传功能,本文通过实例代码效果截图给大家介绍的非常详细,需要的朋友可以参考下
    2019-11-11
  • Node.js脚本实现批量导入多语言标签到Strapi

    Node.js脚本实现批量导入多语言标签到Strapi

    在多语言网站开发中,我们常常需要在 Strapi 中维护大量的标签(Tags),本文将介绍如何使用 Node.js 脚本批量导入标签,并支持多语言(英文 / 德语 / 法语)与自动生成 slug,感兴趣的可以了解下
    2025-12-12
  • Nodejs实现的操作MongoDB数据库功能完整示例

    Nodejs实现的操作MongoDB数据库功能完整示例

    这篇文章主要介绍了Nodejs实现的操作MongoDB数据库功能,结合完整实例形式分析了nodejs针对MongoDB数据库的连接及增删改查基本操作技巧,需要的朋友可以参考下
    2019-02-02
  • 安装pnpm及解决安装失败的过程

    安装pnpm及解决安装失败的过程

    pnpm是一种高效的包管理工具,它通过共享依赖包存储库和符号链接技术,节省磁盘空间、提高安装速度并支持高效的更新,pnpm还兼容npm和Yarn的生态,适合大型项目和频繁安装依赖的开发团队使用
    2026-01-01
  • nodejs中的异步编程知识点详解

    nodejs中的异步编程知识点详解

    在本篇内容里小编给大家整理的是一篇关于nodejs中的异步编程知识点详解内容,有兴趣的朋友们可以学习下。
    2021-01-01
  • 从0-1搭建webpack的前端工程化项目教程

    从0-1搭建webpack的前端工程化项目教程

    文章系统讲解了前端工程化概念及Webpack的核心作用,涵盖模块化、组件化、自动化开发流程,重点介绍Webpack配置、插件(如devServer、htmlWebpackPlugin)使用、Loader处理CSS/JS等文件、SourceMap调试机制,以及@路径别名优化项目结构的实践方法
    2025-08-08

最新评论