MongoDB

MongoDB

MongoDB 是一个基于分布式文件存储的数据库,是一个介于关系数据库和非关系数据库之间的产品.

主要特点

  • 面向文档存储,文档是一组键值(key-value)对(即BSON)Binary JSON
  • MongoDB中可以为数据设置索引,以提高查询和排序的速度
  • Mongo支持丰富的查询表达式
  • MongoDB支持各种编程语言
  • MongoDB安装简单

MongoDB和mysql概念对比

SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键

mongoDB命令

“show dbs”命令可以显示所有数据的列表====同show databases

“db”查看当前所载数据库

“use”命令,可以连接到一个指定的数据库,若不存在则创建

mongoDB插入文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
==================================insert=======================================
db.集合名.insert(bson数据)
举例:
db.user.insert({"name":'zhangsan','age':20,'sex':'男','hobby':['篮球','足球']})
插入多条数据的时候可以通过变量接收在传参
b = [
{"name":'张三','age':23,'sex':'男'},
{"name":'李四','age':24,'sex':'女'},
{"name":'赵柳','age':25,'sex':'男'},
{"name":'田七','age':26,'sex':'女'}
]

db.user.insert(b)

查看集合中的所有文档 查看表中所有数据
db.user.find()
====================================save()=======================================
不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据,不存在则提添加
-- 如果不指定_id,则添加
db.user.save({'name':'aabbcc','age':22,'email':'zbc@qq.com'})
-- 指定 _id,替换数据
db.user.save({'_id':ObjectId("5af2481389c88795375d5762"),'name':'田六','age':22,'email':'zbc@qq.com'})
-- 无对应_id的数据,则添加
db.user.save({'_id':10011,'name':'田七','age':22,'email':'zbc@qq.com'})

MongoDB 更新文档

db.集合名.update(条件,修改值,{upsert:xxx, multi:xxx})

  • upsert : 可选,找不到指定的数据,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,全部更新
1
2
3
4
5
6
7
8
9
10
11
实例:
-- 找到 name=田七 的数据,更新age字段,只更新找到的第一条数据,如果没有找到也不添加
db.user.update({'name':'田七'},{$set:{'age':29}})

-- multi默认为false,(只更新找到的第一条数据)
-- 找到name=田七的 数据,更新eamil字段,更新所有符合条件的数据,如果没有找到,也不添加
db.user.update({"name":"田七"},{$set:{'age':26,'email':'tq@qq.com'}},{multi:true})

-- upsert 默认为false,(如果找到不到符合条件的数据,也不添加)
-- 找到name=田七的 数据,更新eamil字段,更新所有符合条件的数据,如果没有找到,就添加数据
db.user.update({"name":"田八"},{$set:{'age':26,'email':'tq@qq.com'}},{multi:true,upsert:true})

MongoDB 删除文档

1
2
3
4
5
db.集合名.remove(条件) 删除所有符合条件的
db.集合名.remove(条件,1) 删除第一条符合条件的
db.集合名.remove({}) 删除所有数据
db.集合名.drop() 删除集合
db.集合名.dropDatabase() 删除数据库

MongoDB 查询文档

①db.集合名.find() 查询所有数据
②db.集合.find(条件) 条件查询 db.col.find({“likes”:{$gt:50}})
| 操作 | 格式 |
| :——–: | :———————-: |
| 等于 | {<key>:<value>} |
| 小于 | {<key>:{$lt:<value>}} |
| 小于或等于 | {<key>:{$lte:<value>}} |
| 大于 | {<key>:{$gt:<value>}} |
| 大于或等于 | {<key>:{$gte:<value>}} |
| 不等于 | {<key>:{$ne:<value>}} |
③MongoDB AND 条件 以逗号隔开 db.col.find({key1:value1, key2:value2})
④MongoDB OR 条件 db.col.find({$or:[{“by”:”菜鸟教程”},{“title”: “MongoDB 教程”}]})
⑤AND 和 OR 联合使用 db.col.find({“likes”: {$gt:50},$or: [{“by”: “菜鸟教程”},{“title”: “MongoDB 教程”}]})
⑥显示指定字段 find({},{‘_id’:1,’name’:1} 1代表显示 0代表不显示 _id默认一直显示,为0才不显示
⑦limit约束 db.集合名.find().limit(数字) 约束显示个数(分页)
⑧sort排序 db.集合名.find().sort({‘排序的键’:1}) 1代表升序 ,-1代表降序
⑨ Skip() db.集合名.find().limit(数字).skip(数字) 跳过前几个去取
⑩aggregate() db.mycol.aggregate([{$group : {_id : “$by_user”, num_tutorial : {$sum : 1}}}]) 按照指定字段分组 然后计算对应数据,_id是固定的
| 表达式 | 描述 |
| :—-: | :——————————–: |
| $sum | 计算总和。 |
| $avg | 计算平均值 |
| $min | 获取集合中所有文档对应值得最小值。 |
| $max | 获取集合中所有文档对应值得最大值。 |

python访问mongoDB

1
2
3
4
5
6
7
8
9
client = pymongo.MongoClient('127.0.0.1', 27017)
db = client.库名
for user in db.集合名.find():
print(user)
#插入数据
#定义数据
data = {'name': 'Aiden', 'age': 30}
#执行数据添加
db.test.insert(data)
1
2
注意在使用ObjectId()方法时需要在python中导入包
from bson.objectid import ObjectId