ToB企服应用市场:ToB评测及商务社交产业平台

标题: 数据库 - Mongo数据库 [打印本页]

作者: 梦见你的名字    时间: 2024-10-5 13:13
标题: 数据库 - Mongo数据库
目录
媒介
一、MongoDB的特点
二、Mongo的核心概念
三、MongoDB的优劣势
四、使用场景
五、MongoDB与其他数据库的对比
六、如何安装MongoDB
七、数据库指令操作
(一)基本数据库操作
(1)毗连 MongoDB
(2)表现所有数据库
(3)选择数据库
(4)表现当前数据库
(二)聚集操作
(1)表现聚集列表
(2)创建聚集
(3)删除聚集
(三)文档(数据)操作
(1)插入文档
(2)查询文档
(3)更新文档
(4)删除文档
(四)索引操作
(1)创建索引
(2)检察索引
(3)删除索引
(五)聚合操作
(1)基本聚合查询
(2)聚合操作符
(六)备份与恢复
(1)数据库备份
(2)数据库恢复
(七)常用条件查询符号
八、使用python操作MongoDB
(一)安装PyMongo
(二)毗连 MongoDB 数据库
(三)选择数据库
(四)选择聚集
(五)插入文档
(1)插入单个文档
(2)插入多个文档
(六)查询文档
(1)查询单个文档
(2)查询多个文档
(3)查询并格式化输出
(七)、更新文档
(1)更新单个文档
(2)更新多个文档
(3)更新操作符
(八)删除文档
(1)删除单个文档
(2)删除多个文档
(3)删除聚集
(九)创建索引
(1)创建单字段索引
(2)创建复合字段
(3)检察索引
(4)删除索引
(十)聚合操作
(十一)数据库和聚集的管理
(1)检察所有数据库
(2)检察聚集列表
(3)删除数据库
(十二)完整代码示例
九、总结


媒介

MongoDB 是一种开源的、面向文档的 NoSQL 数据库,由 MongoDB Inc. 开发和维护。它与传统的关系型数据库(如 MySQL、PostgreSQL)不同,使用 JSON 风格的 BSON(二进制 JSON)数据格式来存储数据,因此数据的格式更加灵活、易于扩展。由于其强盛的扩展性、分布式结构和高效的查询能力,MongoDB 成为了当代大数据应用和云计算情况中常用的数据库之一。

一、MongoDB的特点

Mongo数据库的特点主要有以下几点:


二、Mongo的核心概念

Mongo的核心概念主要包罗以下几点:
(1)数据库(Database)

(2)聚集(Collection)

(3)文档(Document)

(4)字段(Field)

(5)索引(Index)

(6)聚集锁(Locking)

(7)复制集(Replica Set)

(8)分片(Sharding)


三、MongoDB的优劣势

优势:
劣势:

四、使用场景

MongoDB的使用场景主要有:
(1)内容管理体系(CMS)

(2)大数据分析

(3)实时数据处理

(4)物联网(IoT)

(5)电商应用


五、MongoDB与其他数据库的对比

特性MongoDBMySQLRedis数据模型文档模型关系模型键值对数据格式BSON 格式表格模式内存中的键值对程度扩展支持分片通过分区实现支持集群模式读写性能较高(特别是海量数据场景中等,取决于索引极高(在内存中操作)事务支持仅支持多文档事务完整事务支持不支持事务主要使用场景内容管理、大数据、实时数据处理传统业务体系、金融数据管理缓存、实时分析、消息队列
六、如何安装MongoDB

MongoDB 可以在 Windows、macOS 和 Linux 体系上安装。具体步调根据操作体系有所不同。通常,使用以下命令即可启动 MongoDB 服务:
1.安装(以 Ubuntu 为例)
  1. sudo apt-get update
  2. sudo apt-get install -y mongo
  3. db
复制代码
2.启动 MongoDB 服务:
  1. sudo service mongo
  2. db
  3. start
复制代码

七、数据库指令操作

(一)基本数据库操作

(1)毗连 MongoDB

  1. mongo
复制代码
毗连默认的当地 MongoDB 实例。如果需要毗连远程服务器,使用以下命令:
  1. mongo
  2. <server_ip>:<port>
复制代码
比方,毗连远程 IP 地址 192.168.1.100 的 27017 端口:
  1. mongo
  2. 192.168.1.100:27017
复制代码
(2)表现所有数据库

  1. show db
  2. s
复制代码
该命令用于列出当前 MongoDB 实例上的所有数据库,并表现每个数据库的大小。
(3)选择数据库

  1. use <database_name>
复制代码
比方,选择 test 数据库:
  1. use test
复制代码
注意: 如果该数据库不存在,使用 use 命令时会自动创建该数据库,但该数据库在插入数据之前不会被现实创建。
(4)表现当前数据库

  1. db
复制代码
该命令表现当前操作的数据库名称。
(二)聚集操作

(1)表现聚集列表

  1. show collections
复制代码
列出当前数据库中的所有聚集,类似于 SQL 中的表。
(2)创建聚集

  1. db
  2. .createCollection("<collection_name>")
复制代码
比方,创建一个名为 students 的聚集:
  1. db
  2. .createCollection("students")
复制代码
(3)删除聚集

  1. db
  2. .<collection_name>.drop()
复制代码
比方,删除 students 聚集:
  1. db
  2. .students.drop()
复制代码
(三)文档(数据)操作

(1)插入文档

MongoDB 使用 insert()、insertOne()、或 insertMany() 方法插入文档。
  1. db
  2. .<collection_name>.insert({ <document> })
复制代码
比方,在 students 聚会合插入一个文档:
  1. db
  2. .students.insert({ name: "John", age: 18, grade: "A" })
复制代码
插入多个文档:
  1. db
  2. .students.insertMany([    { name: "Alice", age: 19, grade: "B" },    { name: "Bob", age: 20, grade: "C" }])
复制代码
(2)查询文档

使用 find() 方法来查询聚会合的数据。
  1. db
  2. .<collection_name>.find({ <query_conditions> })
复制代码
比方,查询 students 聚会合所有年事大于 18 的文档:
  1. db
  2. .students.find({ age: { $gt: 18 } })
复制代码
查询结果格式化输出:
  1. db
  2. .students.find().pretty()
复制代码
(3)更新文档

使用 update() 或 updateOne()、updateMany() 来更新文档。
  1. db
  2. .<collection_name>.update(    { <query_conditions> },     { $set: { <new_values> } })
复制代码
比方,将 name 为 John 的门生的年事更新为 19:
  1. db
  2. .students.update(    { name: "John" },    { $set: { age: 19 } })
复制代码
如果只想更新第一个匹配项,可以使用 updateOne:
  1. db
  2. .students.updateOne(    { name: "John" },    { $set: { grade: "A+" } })
复制代码
注意: 在 MongoDB 中,默认的 update 操作会替换整个文档,如果不使用 $set 操作符,则会丢失未指定的字段。
(4)删除文档

使用 remove() 方法删除符合条件的文档。
  1. db
  2. .<collection_name>.remove({ <query_conditions> })
复制代码
比方,删除 name 为 Alice 的文档:
  1. db
  2. .students.remove({ name: "Alice" })
复制代码
如果只删除第一个匹配项,可以指定 justOne 参数:
  1. db
  2. .students.remove({ name: "Alice" }, { justOne: true })
复制代码
(四)索引操作

(1)创建索引

使用 createIndex() 方法为字段创建索引:
  1. db
  2. .<collection_name>.createIndex({ <field_name>: <1 | -1> })
复制代码
比方,在 email 字段上创建升序索引:
  1. db
  2. .users.createIndex({ email: 1 })
复制代码
(2)检察索引

  1. db
  2. .<collection_name>.getIndexes()
复制代码
比方,检察 users 聚集的索引:
  1. db
  2. .users.getIndexes()
复制代码
(3)删除索引

  1. db
  2. .<collection_name>.dropIndex({ <field_name>: <1 | -1> })
复制代码
比方,删除 email 字段上的索引:
  1. db
  2. .users.dropIndex({ email: 1 })
复制代码
(五)聚合操作

MongoDB 提供了强盛的聚合框架,可以对文档进行复杂的数据处理。
(1)基本聚合查询

使用 aggregate() 方法进行聚合操作:
  1. db
  2. .<collection_name>.aggregate([ { <stage1> }, { <stage2> }, ... ])
复制代码
比方,按 age 字段进行分组,并计算每个年事段的用户数目:
  1. db
  2. .users.aggregate([    { $group: { _id: "$age", total: { $sum: 1 } } }])
复制代码
(2)聚合操作符


比方,按年事降序分列 users 聚会合的所有文档:
  1. db
  2. .users.aggregate([    { $sort: { age: -1 } }])
复制代码
(六)备份与恢复

(1)数据库备份

使用 mongo
dump 命令行工具进行备份:
  1. mongo
  2. dump --db
  3. <database_name> --out <backup_directory>
复制代码
比方,将 test 数据库备份到 ./backup 目录:
  1. mongo
  2. dump --db
  3. test --out ./backup
复制代码
(2)数据库恢复

使用 mongo
restore 工具进行数据库恢复:
  1. mongo
  2. restore --db
  3. <database_name> <backup_directory>
复制代码
比方,从 ./backup 目录恢复 test 数据库:
  1. mongo
  2. restore --db
  3. test ./backup/test
复制代码
(七)常用条件查询符号

MongoDB常用的查询符号有以下几种:


八、使用python操作MongoDB

在 Python 中使用 MongoDB 通常需要使用 pymongo
库,这是一个官方提供的 MongoDB 驱动步伐,可以帮助我们在 Python 中轻松地进行数据库操作。下面,我将详细介绍如何通过 pymongo
进行 MongoDB 的毗连、数据库操作、聚集管理、数据操作等。
(一)安装PyMongo

在开始之前,请确保已经安装了 pymongo
库。可以使用以下命令进行安装:
  1. pip install pymongo
复制代码
(二)毗连 MongoDB 数据库

首先,需要使用 pymongo
创建一个数据库毗连。毗连 MongoDB 的语法格式如下:
  1. from pymongo
  2. import MongoClient# 创建一个 MongoDB 客户端client = MongoClient("mongo
  3. db
  4. ://localhost:27017/")
复制代码
这里 localhost:27017 是默认的 MongoDB 服务器地址和端口号。如果你的 MongoDB 服务器在其他主机或使用了自定义端口,可以根据现实情况修改毗连字符串,比方:mongo
db
://username:password@server_ip:port/。
(三)选择数据库

在 MongoDB 中,每个数据库由多个聚集组成。可以使用 client.<database_name> 或者 client['database_name'] 来选择数据库:
  1. # 选择数据库(如果数据库不存在,会在插入数据时创建)db
  2. = client['test_database']
复制代码
(四)选择聚集

聚集类似于关系数据库中的表。可以使用 db
.<collection_name> 或者 db
['collection_name'] 来选择聚集:
  1. # 选择聚集(如果聚集不存在,会在插入数据时创建)collection = db
  2. ['users']
复制代码
(五)插入文档

(1)插入单个文档

使用 insert_one() 插入单个文档:
  1. # 插入一个文档
  2. user = {"name": "Alice", "age": 25, "email": "alice@example.com"}
  3. collection.insert_one(user)
复制代码
(2)插入多个文档

使用 insert_many() 插入多个文档:
  1. # 插入多个文档
  2. users = [
  3.     {"name": "Bob", "age": 30, "email": "bob@example.com"},
  4.     {"name": "Charlie", "age": 28, "email": "charlie@example.com"},
  5. ]
  6. collection.insert_many(users)
复制代码
(六)查询文档

(1)查询单个文档

使用 find_one() 查询单个文档:
  1. # 查询 name 为 "Alice" 的文档
  2. result = collection.find_one({"name": "Alice"})
  3. print(result)
复制代码
(2)查询多个文档

使用 find() 查询符合条件的所有文档。可以通过 for 循环遍历查询结果:
  1. # 查询所有年龄大于 25 的用户
  2. results = collection.find({"age": {"$gt": 25}})
  3. for user in results:
  4.     print(user)
复制代码
(3)查询并格式化输出

使用 pprint 模块对查询结果进行格式化输出:
  1. from pprint import pprint
  2. # 查询所有文档,并格式化输出
  3. results = collection.find({})
  4. for user in results:
  5.     pprint(user)
复制代码
(七)、更新文档

(1)更新单个文档

使用 update_one() 更新第一个符合条件的文档:
  1. # 将 name 为 "Alice" 的用户的年龄更新为 26
  2. collection.update_one({"name": "Alice"}, {"$set": {"age": 26}})
复制代码
(2)更新多个文档

使用 update_many() 更新所有符合条件的文档:
  1. # 将所有年龄大于 25 的用户的 email 域名改为 "example.org"
  2. collection.update_many({"age": {"$gt": 25}}, {"$set": {"email": "user@example.org"}})
复制代码
(3)更新操作符


比方,将用户 Bob 的年事增加 5 岁:
  1. collection.update_one({"name": "Bob"}, {"$inc": {"age": 5}})
复制代码
(八)删除文档

(1)删除单个文档

使用 delete_one() 删除第一个符合条件的文档:
  1. # 删除 name 为 "Charlie" 的文档
  2. collection.delete_one({"name": "Charlie"})
复制代码
(2)删除多个文档

使用 delete_many() 删除所有符合条件的文档:
  1. # 删除所有年龄小于 30 的用户
  2. collection.delete_many({"age": {"$lt": 30}})
复制代码
(3)删除聚集

删除整个聚集:
  1. # 删除集合 users
  2. collection.drop()
复制代码
(九)创建索引

索引是提高查询速度的一个重要机制。可以通过 create_index() 方法为某个字段创建索引。
(1)创建单字段索引

  1. # 为 name 字段创建升序索引
  2. collection.create_index([("name", 1)])
复制代码
(2)创建复合字段

  1. # 为 name 和 age 字段创建复合索引
  2. collection.create_index([("name", 1), ("age", -1)])
复制代码
(3)检察索引

  1. # 查看当前集合的所有索引
  2. print(collection.index_information())
复制代码
(4)删除索引

  1. # 删除 name 字段上的索引
  2. collection.drop_index("name_1")
复制代码
(十)聚合操作

聚合操作是处理和分析数据的一个强盛功能。比方,统计每个年事段用户的数目:
  1. # 按 age 字段分组,并统计每个年龄的用户数量
  2. pipeline = [
  3.     {"$group": {"_id": "$age", "count": {"$sum": 1}}}
  4. ]
  5. results = collection.aggregate(pipeline)
  6. for result in results:
  7.     print(result)
复制代码
(十一)数据库和聚集的管理

(1)检察所有数据库

  1. print(client.list_database_names())
复制代码
(2)检察聚集列表

  1. print(db
  2. .list_collection_names())
复制代码
(3)删除数据库

  1. client.drop_database('test_database')
复制代码
(十二)完整代码示例

以下是一个完整的 MongoDB 操作示例代码:
  1. from pymongo
  2. import MongoClient# 毗连 MongoDBclient = MongoClient("mongo
  3. db
  4. ://localhost:27017/")db
  5. = client['test_database']collection = db
  6. ['users']# 插入数据collection.insert_one({"name": "Alice", "age": 25, "email": "alice@example.com"})# 查询数据user = collection.find_one({"name": "Alice"})print("查询结果:", user)# 更新数据collection.update_one({"name": "Alice"}, {"$set": {"age": 26}})print("更新后的数据:", collection.find_one({"name": "Alice"}))# 删除数据collection.delete_one({"name": "Alice"})print("删除后的数据:", collection.find_one({"name": "Alice"}))# 关闭数据库毗连client.close()
复制代码

九、总结

MongoDB 是一个功能强盛、灵活且易于扩展的 NoSQL 数据库,特别得当处理复杂的、非结构化的数据以及大规模数据存储和分布式摆设。尽管在事务处理和数据一致性上与传统的关系数据库(如 MySQL、PostgreSQL)存在差距,但在大数据和高并发场景下,它提供了更多的优势和可扩展性。通过合理配置和管理,MongoDB 可以为当代 Web 应用、云计算、大数据等范畴提供强有力的支持。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4