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的资料请关注脚本之家其它相关文章!

相关文章

  • 剖析Node.js异步编程中的回调与代码设计模式

    剖析Node.js异步编程中的回调与代码设计模式

    这篇文章主要介绍了Node.js异步编程中的回调与代码设计模式,虽然大多数场合回调编写时的长串括号不怎么好看,但Node的异步性能确实很好,需要的朋友可以参考下
    2016-02-02
  • nodejs+mongodb+vue前后台配置ueditor的示例代码

    nodejs+mongodb+vue前后台配置ueditor的示例代码

    本篇文章主要介绍了nodejs+mongodb+vue前后台配置ueditor的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • node.js中的fs.readlink方法使用说明

    node.js中的fs.readlink方法使用说明

    这篇文章主要介绍了node.js中的fs.readlink方法使用说明,本文介绍了fs.readlink方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • Nodejs实现的一个静态服务器实例

    Nodejs实现的一个静态服务器实例

    这篇文章主要介绍了Nodejs实现的一个静态服务器实例,本文实现的静态服务器实例包含cache功能、压缩功能等,需要的朋友可以参考下
    2014-12-12
  • Node.js通过配置 strict-ssl=false解决npm安装卡住问题

    Node.js通过配置 strict-ssl=false解决npm安装卡住问题

    使用npm安装依赖包是常见的任务之一,有时会遇到安装卡住的问题,本文就来介绍一下通过配置 strict-ssl=false解决npm安装卡住问题,感兴趣的可以了解一下
    2024-12-12
  • Nodejs中JSON和YAML互相转换方式

    Nodejs中JSON和YAML互相转换方式

    这篇文章主要介绍了Nodejs中JSON和YAML互相转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • node.js 模块和其下载资源的镜像设置的方法

    node.js 模块和其下载资源的镜像设置的方法

    这篇文章主要介绍了node.js 模块和其下载资源的镜像设置的方法,在设置淘宝镜像共有三种方法,每种方法通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2018-09-09
  • node.js实现带进度条的多文件上传

    node.js实现带进度条的多文件上传

    这篇文章主要为大家详细介绍了node.js实现携带进度条的多文件上传,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • Node.js获取前端ajax提交的request信息

    Node.js获取前端ajax提交的request信息

    这篇文章主要为大家详细介绍了Node.js获取前端ajax提交的request信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • node.js中的事件处理机制详解

    node.js中的事件处理机制详解

    相信接触过编程的同学应该都了解,在访问任何网页的时候,会伴随着许多的事件,例如点击菜单,移动鼠标等等。那么node.js是如何处理的?下面通过这篇文章就来给大家详细的介绍下node.js中的事件处理机制,有需要的朋友们可以参考借鉴,下面来一起学习学习吧。
    2016-11-11

最新评论