文档数据库,NoSQL中最像SQL的数据库,最像关系型数据库的非关系型数据库。
基于分布式文件存储的开源数据库系统,旨在为WEB应用提供可扩展的高性能数据存储解决方案,mongo将数据存储为一个文档,文档数据表示为Binary Json格式
以下是关系型数据库与MongoDB数据库的对比
关系型数据库 | MongoDB数据库 |
---|---|
1. 数据库 2. 表 3. 行 |
1. 数据库 2. Collection 3. Document |
数据库 | 数据库 |
表格 name | age Jack | 27 Mack | 26 |
集合 {‘name’:‘Jack’,‘age’:27} {‘name’:‘Mack’,‘age’:26} |
行 Mack | 26 |
文档 {‘name’:‘Mack’,‘age’:26} |
进入用关键字 mongo,退出用 exit
简介 | 关键字 |
---|---|
显示所有库 | show dbs |
切换/创建数据库 | use 数据库名称 |
查看所在库 | db |
删除当前所在的库 | db.dropDatabase() |
显示当前数据库的集合:show collections
创建集合:db.createCollection(name)
删除集合:db.集合名称.drop()
文档即关系数据库的数据,文档结构类似于json
db.集合名称.insert(document)
每一条数据,就是一个document,以键值对的形式组成
db.student.insert({name:'xiaoming', age:18})
添加文档时,如果不指定 _id参数,MongoDB会自动为文档分配一个唯一的ObjectId,同样也可以指定 _id参数:
db.student.insert({'_id':1, name:'xiaoming', age:18})
添加多条文档:
db.student.insert([
{name:'xiaoming', sex:'男', age:16},
{name:'xiaobai', sex:'男', age:18},
{name:'moran' sex:'女', age:18},
])
db.集合名称.find()
查看文档也会以键值对的形式展示,并且会附带 _id
查看集合中全部数据:db.student.find()
格式化显示:db.student.find().pretty()
查看满足条件的数据:db.student.find({name:'jack'})
{$and:[{expression1},{expression2}...]}
用法是$and作为键,与作为值的列表内的条件进行运算
{$or:[{expression1},{expression2}...]}
db.table.find({$or:[{$and:[{sex:'女'}, {age:18}]},{$and:[{sex:'男'}, {age:{$gt:18}}]}]})
#查找年龄等于18的女性或年龄大于18的男性
操作符 | 描述 |
---|---|
$ne | 不等于 |
$gt | 大于 |
$lt | 小于 |
$gte | 大于等于 |
$lte | 小于等于 |
db.集合名称.update(
修改一条数据: db.table.update({sex:'男'}, {age:20})
只会更新所匹配到的第一条集合,并且会替换掉集合里的全部内容,修改性别为男的第一条数据,改为{age:20}
指定属性修改: db.table.update({name:'jack'}, {$set: {age:16}})
将name为jack的文档中的age修改为16
更新集合中所有满足条件的文档:db.table.update({sex:'男'}, {$set:{sex:'女'}},{ multi:true})
db.集合名称.remove(
删除集合中所有的文档:db.table.remove({})
删除集合中满足条件的所有文档: db.table.remove({sex: '男'})
只删除集合中满足条件的第一条文档: { justOne: true }
db.table.remove({sex:'男'}, { justOne:true} )
在终端中输入(安装): pip install pymongo
Python 交互 MongoDB 的3种情况:
本地Python连接VBox里的Mongo
1. 用的本地的python
1. 本地python是没有pymongo, pip install pymongo
2. MongoClient('127.0.0.1', 1235)
1. Box: 如果虚拟机是在box中
1. 要先设置端口转发, 127.0.0.1 1235 27017
2. 互联网主机信息互通, A,B电脑能上网, A电脑能通过B电脑的能上网的IP地址来访问
B电脑, 同样的B如果要访问A, 也得有A电脑的能上网的Ip地址.
3. sudo ufw allow 27017
4. sudo vim /etc/mongodb.conf
bind_ip = 0.0.0.0
5. sudo service mongodb restart
本地Python连接VM里的Mongo
1. 用的是本地Python
1. 本地python是没有pymongo, pip install pymongo
2. 用的是vmware, MongoClient('你虚拟机能上网的ip', 27017)
1. sudo ufw allow 27017
4. sudo vim /etc/mongodb.conf
bind_ip = 0.0.0.0
5. sudo service mongodb restart
虚拟机Python使用虚拟机里的Mongo
1. 用的不是本地py, 用的是虚拟机的python
1. 如果虚拟机的python没有pymongo, pip3 install pymongo 或者pip install pymongo
2. 或者使用Pycharm安装pymongo
2. MongoClient('127.0.0.1', 27017) 或者 MongoClient()
因为你的虚拟机的mongodb 和你的python再同一个主机主机里面.
所以你不需要修改配置文件, 也不需要开放端口.
因为默认mongo允许本机的对象访问, ubuntu允许本机的对象访问27017端口
参考文档: