本文介绍了MongoDB的基本概念、安装配置方法以及CRUD操作,提供了丰富的MongoDB资料,包括数据复制、分片和安全措施,并列举了实际应用场景和在线学习资源。
MongoDB是一款基于分布式文档模型的NoSQL数据库。它提供高性能、高可用性和自动扩展的特性,并允许用户存储和处理大量的数据。MongoDB使用JSON风格的文档来存储数据,其中每个文档都是键值对的集合。文档可以嵌套结构,支持丰富的数据类型,如数组、嵌入文档等。
MongoDB可以通过其官方网站下载安装包。这里分别以在Linux、Windows和macOS环境下安装MongoDB为例。
在终端中输入以下命令下载MongoDB:
wget -qO - https://www.mongodb.org/static/pgp/mongodb-enterprise.pub | sudo apt-key add -
添加MongoDB的APT仓库:
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list > /dev/null
更新APT包列表并安装MongoDB:
sudo apt-get update sudo apt-get install -y mongodb-org
sudo systemctl start mongod sudo systemctl enable mongod
验证MongoDB是否安装成功并运行中,可以通过以下命令进入MongoDB shell:
mongo
如果MongoDB成功启动并运行,将会看到MongoDB shell的提示符:
MongoDB shell version v4.4.11 connecting to: mongodb://localhost:27017/?gssapiServiceName=mongodb Implicit collation set to 'en_US' while connecting to server: mongodb://localhost:27017 --- The server generated these warnings after startup Check for other warnings and connect again MongoDB server version: v4.4.11 ---
mongod --dbpath "C:\data\db"
使用Homebrew安装MongoDB:
brew install mongodb-community
brew services start mongodb-community
验证MongoDB是否安装成功并运行中,可以通过以下命令进入MongoDB shell:
mongo
{}
包裹,键值对之间用,
分隔。MongoDB使用文档模型存储数据。每个文档都是一个{}
包裹的键值对集合,支持嵌套文档和数组。例如,一个用户文档可能包含用户ID、用户名和一组地址:
{ "_id" : ObjectId("593c7b4e71bfa80006c4e745"), "username" : "user1", "addresses" : [ { "street" : "Main St", "city" : "New York", "state" : "NY" } ] }
MongoDB支持多种类型的索引,例如唯一索引、复合索引等。索引能显著提高查询性能。
创建一个唯一索引:
db.users.createIndex({username: 1}, {unique: true})
查询所有用户:
db.users.find()
查询特定用户:
db.users.find({username: "user1"})
在集合中插入文档:
db.users.insertOne({ username: "user2", email: "user2@example.com", age: 25 })
查询单个文档:
db.users.findOne({username: "user2"})
查询多个文档:
db.users.find({age: 25})
更新单个文档:
db.users.updateOne( {username: "user2"}, {$set: {email: "newemail@example.com"}} )
更新多个文档:
db.users.updateMany( {age: 25}, {$set: {email: "updatedemail@example.com"}} )
删除单个文档:
db.users.deleteOne({username: "user2"})
删除多个文档:
db.users.deleteMany({age: 25})
创建新数据库:
use newdb
创建新集合:
db.createCollection("newcollection")
删除数据库:
db.runCommand({dropDatabase: 1})
删除集合:
db.newcollection.drop()
使用聚合框架进行复杂查询:
db.users.aggregate([ { $match: { age: { $gte: 25 } } }, { $group: { _id: "$username", count: { $sum: 1 } } } ])
原子性更新操作:
db.users.updateOne( {username: "user2"}, {$inc: {age: 1}}, {upsert: true} )
MongoDB支持主从复制、副本集和分片集群等多种复制方法。主从复制是最简单的复制方式,一个主节点负责写操作,多个从节点负责读操作。
主从复制配置:
在主节点上启动MongoDB实例:
mongod --replSet rs0 --dbpath /data/rs0
在从节点上启动MongoDB实例:
mongod --replSet rs0 --dbpath /data/rs1 --slave --source localhost:27017
使用rs.initiate()
初始化副本集:
rs.initiate()
故障恢复:
当主节点发生故障时,副本集会自动选举新的主节点。确保每个节点都有足够的资源和网络连接,以确保故障恢复的高可用性。
故障恢复示例:
mongod --replSet rs0 --dbpath /data/rs1 --source localhost:27017
数据分片可以将数据分布到多个服务器上,提高读写性能。MongoDB提供自动分片功能。
分片配置:
创建分片配置:
mongos --configdb localhost:27019 --configsvr --fork mongod --configsvr --dbpath /data/configsvr --fork mongod --shardsvr --dbpath /data/db0 --fork mongod --shardsvr --dbpath /data/db1 --fork mongos --configdb localhost:27019 --configsvr --fork
初始化分片:
sh.enableSharding("testdb") sh.shardCollection("testdb.users", {username: 1})
MongoDB提供了多种安全措施,如访问控制、用户认证等。使用用户认证来限制对数据库的访问。
use admin db.createUser({ user: "admin", pwd: "password", roles: [ { role: "root", db: "admin" } ] })
mongo -u admin -p password --authenticationDatabase admin
给用户分配特定的权限:
db.grantRolesToUser("user1", [{ role: "readWrite", db: "testdb" }])
MongoDB支持细粒度的访问控制,可以通过配置文件和命令行参数来设置。
配置文件示例:
security: authorization: enabled
mongod --auth --port 27017 --dbpath /data/db
聚合框架提供了数据处理的流式管道,可以进行聚合、分组、过滤等操作。以下是使用聚合框架的例子:
db.users.aggregate([ { $match: { age: { $gte: 25 } } }, { $group: { _id: "$username", count: { $sum: 1 } } }, { $sort: { count: -1 } } ])
一个典型的电子商务应用案例:
db.users.insertMany([ { username: "user1", password: "password1", email: "user1@example.com" }, { username: "user2", password: "password2", email: "user2@example.com" } ])
db.orders.insertMany([ { orderId: "123", userId: "user1", items: [{ productId: "p1", quantity: 2, price: 100 }, { productId: "p2", quantity: 1, price: 50 }] }, { orderId: "124", userId: "user2", items: [{ productId: "p3", quantity: 3, price: 150 }] } ])
db.products.insertMany([ { productId: "p1", name: "Product 1", quantity: 100, price: 100 }, { productId: "p2", name: "Product 2", quantity: 50, price: 50 }, { productId: "p3", name: "Product 3", quantity: 200, price: 150 } ])
选择MongoDB版本应该考虑以下几个因素:
mongodump
命令备份数据到文件,使用mongorestore
命令恢复数据。explain
命令分析查询性能,优化索引。explain
命令:分析查询性能,优化查询和索引。db.stats()
:获取数据库和集合的统计信息。db.collection.explain()
:查看查询计划,优化查询性能。以上是MongoDB新手入门与初级应用指南的详细内容,希望对你有所帮助。