一、MongoDB
简介
-
MongoDB
是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。 -
MongoDB
中将数据存储为一个文档,文档由键值对(key=>value)组成,MongoDB
文档类似于JSON
对象。字段值可以包含其他文档,数组及文档数组。 -
基于分布式文件存储的开源数据库系统
-
和关系型数据库一样,
MongoDB
存在数据库的概念,一个MongoDB
可以创建多个数据库。 -
多个键及其关联的值有序地放置在一起就是文档,文档是
MongoDB
中数据的基本单元,是MongoDB
的核心概念,很类似关系数据库中的行(记录)。 -
集合就是一组文档的组合,集合可以被看作关系型数据库中的表。
-
MongoDB
数据库相关概念与SQL
数据库相关概念的对比SQL
数据库MongoDB
数据库Database(数据库) Database(数据库) Table(表) Collection(集合) Record(记录) Document(文档)
二、MongoDB概念解析
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database |
database |
数据库 |
table |
collection |
数据库表/集合 |
row |
document |
数据记录行/文档 |
column |
field |
数据字段/域 |
index |
index |
索引 |
table joins |
表连接,MongoDB 不支持 |
|
primary key |
primary key |
主键,MongoDB 自动将_id 字段设置为主键 |
三、MongoDB常用操作命令
3.1 库级命令
命令 | 解释 |
---|---|
db |
查看当前数据库(默认为test ) |
use DATABASE_NAME |
切换或创建数据库 |
show dbs |
显示所用有数据的数据库 |
db.dropDatabse() |
删除数据库 |
3.2 集合的操作命令
命令 | 解释 |
---|---|
db.createCollection(name, options) |
创建集合name : 要创建的集合名称options : 可选参数, 指定有关内存大小及索引的选项 |
show collections |
显示所有集合 |
db.connectionName.drop() |
删除指定<connectionName> 集合 |
options
选项
options 类型 描述 capped
布尔 (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 当该值为 true 时,必须指定 size 参数。 autoIndexId
布尔 3.2 之后不再支持该参数。(可选)如为 true,自动在 _id 字段创建索引。默认为 false。 size
数值 (可选)为固定集合指定一个最大值,以千字节计(KB)。 如果 capped 为 true,也需要指定该字段。 max
数值 (可选)指定固定集合中包含文档的最大数量
3.3 文档操作命令
3.3.1 插入数据
命令 | 解释 |
---|---|
db.collectionName.insert(document) |
插入文档, 集合不存在会自动创建, 不能插入重复_id 的数 |
db.collectionName.insertOne(document) |
插入一条文档 |
db.collectionName.insertMany(documents) |
插入多条数据 |
db.collectionName.insert([<document 1>, <document 2>, ..., <document n>])
db.collectionName.insertOne(<documnet>, {writeConcern: <document>})
db.collectionName.insertMany([<document 1>, <document 2>, ..., <document n>], {writeConcern: <document>, ordered: <boolean>})
参数说明:
document
:要写入的文档。writeConcern
:写入策略,默认为 1,即要求确认写操作,0 是不要求。ordered
:指定是否按顺序写入,默认 true,按顺序写入。
插入数据示例
db.student.insert(
{_id: 0, name:'小薇', age: 20}
) # 插入一条数据到student集合
db.student.insert(
[
{_id: 1, name:'小明', age: 19},
{_id: 2, name:'小芳', age: 20},
{_id: 3, name:'小蓝', age: 21},
]
) # 插入多条数据
3.3.2 查询数据
命令 | 解释 |
---|---|
db.collectionName.find(condition) |
查询数据 |
db.collectionName.find(condition).pretty() |
结构化显示 |
1. 无条件查询
db.collectionName.find() # 无条件查询, 查询出所有数据
db.collectionName.find().pretty() # 查询出所有数据并格式化显示
无条件查询示例
db.student.find() # 查询出所用数据
2. 条件查询
条件操作符 | 说明 |
---|---|
$ne |
不等于 != |
$lt |
小于 < |
$gt |
大于 > |
$lte |
小于或等于 <= |
$gte |
大于或等于 >= |
$and:[{expression 1}, {expression_2}, ..., {expression n}] |
合取, 且 |
$or: [{expression 1}, {expression_2}, ..., {expression n}] |
析取, 或 |
查询示例
db.student.find(
{
age: {$lt: 20})
}
) # 查询出 age<20 的学生
db.student.find(
{$and:[{age:{$lt: 20}}, {age: {$gt:18}}]}
) # 查询出18 < age < 20的学生
db.student.find(
{$or:[{age:{$lt: 20}}, {age: {$gt:18}}]}
) # 查询出 age < 20 或 age > 18 的学生
3.3.3 更新文档
命令 | 解释 |
---|---|
db.collectionName.update(<query>, <update>, {options}) |
更新文档 |
db.collectionName.save(<document>, {writeConcern: <document>}) |
替换已有文档 |
语法说明
db.collectionName.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } )
参数说明
- query : update的查询条件,类似sql update查询内where后面的
- update : update的对象和一些更新的操作符(如(,)inc...)等,也可以理解为sql update查询内set后面的
- upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入
- multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新
- writeConcern :可选,抛出异常的级别
db.collection.save( <document>, { writeConcern: <document> } )
参数说明
- document : 文档数据
- writeConcern :可选,抛出异常的级别
命令
命令 | 作用 |
---|---|
db.collectionName.update({query}, {update}) |
全文档替换 |
db.collectionName.update({query}, {$set:{update}) |
指定field 域修改 |
db.collectionName.update({query}, {$set:{update}}, {multi:true}) |
更新满足条件的文档 |
更新示例
db.student.update({age: {$lt: 20}}, {sex: "male"}) # 将age < 10学生文档替换为{sex: "male"}
db.student.update({sex:"male"}, {$set:{sex:'female'}}) # 将sex=male的文档修改为sex=female
db.student.update({age:20}, {$set:{sex: "male"}}, {multi: true}) # 将age=20的所有文档中的sex修改为female
3.3.4 删除文档
命令 | 解释 |
---|---|
db.collectionName.remove({query}) |
删除满足条件的所有文档 |
db.collectionName.remove({query}, {justOne:true}) |
删除满足条件的第一条数据 |
db.collectionName.remove({}) |
清空文档, 无条件删除 |
删除示例
db.student.remove({_id:1}) # 删除_id=1的数据
db.student.remove({age: 20}, {justOne:true}) # 删除age=20的第一条数据
db.student.remove({}) # 无条件删除
三、python操作mongodb
python操作mongodb需要一个第三方接口pymongo
提供支持
3.1 链接mongodb
import pymongo
client = pymongo.MongoClient() # 链接mongodb数据库
db = client["db_name"] # 进入数据库, 没有则创建
collection = db["collection_name"] # 选择集合, 没有则创建集合, 返回一个集合对象
3.2 常用方法
collection
是集合对象
方法 | 解释 |
---|---|
查询 | |
collection.find({filter}) |
查询满足条件的所有数据 |
collection.find_one({filter}) |
查询满足条件的第一条数据 |
添加 | |
collection.insert([{document 1}, ...,{document n}]) |
添加数据, 多条数以列表添加 |
collection.insert_one({document}) |
添加一条数据 |
collection.insert_many([{document 1}, ...,{document n}]) |
添加多条数据 |
更新 | |
collection.update({filter}, {update_document}) |
修改满足条件的数据 |
collection.update_one({filter}, {update_documnet}) |
修改满足条件的第一条数据 |
collection.update_many({filter}, {update_document}) |
修改满足条件的所有数据 |
删除 | |
collection.delete_one({filter}) |
删除满足条件的一条数据 |
collection.delete_many({filter}) |
删除满足条件的数据 |