Node.js中操作MongoDB的CRUD操作指南
作者:慕仲卿
在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();
在使用以上代码时,请通过替换collectionName
、query
和updateDoc
的值以适配你的实际需求。
这个指南涵盖了在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的资料请关注脚本之家其它相关文章!