MongoDB介绍
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
版本
- 偶数为稳定版,如1.6.X,奇数为开发版,如1.7.X
- 32bit的mongodb最大只能存放2G的数据,64bit就没有限制
MongoDB下载和安装
下载MongoDB
以下是一些主要步骤:
安装过程中,可能会遇到如下错误提示:
原因:没有足够的权限启动MongoDB服务器系统服务
解决方法:
以管理员身份进入命令提示你符,输入sc delete MongoDB
在data目录下新建文件
重新装一个MongoDB服务,在安装目录的bin中打开控制台窗口输入命令
mongod --dbpath=F:\install_APP\MongoDB\data\db --logpath=F:\install_APP\MongoDB\log\MongoDB.log --install --serviceName “MongoDB”
第一个路径表示的是数据存放地址;第二个路径表示日志存放文件
启动成功!
下载完成之后,需要将bin目录添加到环境变量中
MongoDB概念
SQL概念 | MongoDB概念 | 说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
- 文档中的键/值对是有序的。
- 文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
- MongoDB区分类型和大小写。
- MongoDB的文档不能有重复的键。
- 文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。
命令提示符窗口启动Mongodb客户端
- 在安装的bin目录下启动命令提示符,输入命令
mongo
- 查看所有的库
show dbs
- 选择数据库 (如果使用的数据库存在 则使用 不存在 则创建)
use 库名
- 查看当前所在的数据库
db/db.getName()
- 创建集合(即创建表)
db.createCollection("user") #创建一个user的集合 在当前的库里
- 查看当前库下的所有集合
show collections
- 删除集合
db.集合名.drop()
添加数据INSERT
# 3.2 版本前
db.user.insert({'name':'lisi', 'age': 20})
db.user.insert([{'name':'lisi', 'age': 20}, {'name': 'wangwu', 'age': 30}])
# 3.2 版本后
# 插入一条文档数据
db.user.insertOne({'name':'lisi', 'age': 20})
# 插入多条文档数据
db.user.insertMany([{'name':'lisi', 'age': 20},{'name': 'wangwu', 'age': 30}])
FIND 查询
# inclusion模式 指定返回的键,不返回其他键
db.collection.find(query, {title: 1, by: 1})
# exclusion模式 指定不返回的键,返回其他键
db.collection.find(query, {title: 0, by: 0})
- 查询一条 findOne()
db.集合名.findOne([条件],{key1:1[,[key2:1]]}) #查询一条数据 代表 显示哪些字段名
- 统计数据条数 count
db.集合名.find([条件]).count()
- 展开来查看 pretty()
db.集合名.find([条件]).pretty()
- 查询条件的操作符
符号 | 符号说明 | 实例 | 说明 |
---|---|---|---|
$gt | 大于 | db.user.find({age:{$gt:18}}) | 年龄大于18 |
$gte | 大于等于 | db.user.find({age:{$gte:18}}) | 年龄大于等于18的 |
$lt | 小于 | db.user.find({age:{$lt:18}}) | 年龄小于18 |
$lte | 小于等于 | db.user.find({age:{$lte:18}}) | 年龄小于等于18 |
{key:value} | 等于 | db.user.find({age:18}) | 年龄等于18 |
/值/ | 模糊查询 | db.user.find({username:/小/}) | 查询username中包含“小”字的文档 |
/^值/ | 以…作为开头 | db.user.find({username:/^小/}) | 查询username中以“小”字作为开头的文档 |
/值$/ | 以…作为结尾 | db.user.find({username:/小$/}) | 查询username中以“小”字作为结尾的文档 |
$in | 在…内 | db.user.find({age:{$in:[18,20,30]}) | 查询年龄在18,20,30的文档 |
$nin | 不在…内 | db.user.find({age:{$nin:[18,20,30]}}) | 查询年龄不在 1,20,30的文档 |
$ne | 不等于 != | db.user.find({age:{$ne:18}}) | 查询年龄不为18的文档 |
- AND 查询
db.集合名.find({条件一,条件二,,,})
- OR 查询
db.集合名.find({$or:[{条件一},{条件二},,,]})
- AND 和 OR 的使用
db.集合名.find({条件一,,,$or:[{条件1},{条件2}]})
#name为张三 年龄为10岁或者28岁的所有数据
db.user.find({name:"张三",$or:[{age:10},{age:28}]})
- LIMIT 取值
db.集合名.find().limit(num) #从第0个开始取几个
- skip 跳过几个
db.集合名.find().skip(num) #跳过几条数据
- limit skip 配合使用
db.集合名.find().skip().limit(num)
- SORT 排序
# 1 为升序排列, -1是降序排列
db.集合名.find().sort({key:1|-1}) #升序或者降序
UPDATE 文档的修改
更新操作符 $set直接修改 $inc累加修改
- 更新记录
3.2版本之前版本
# 只更新第一条记录
db.col.update({"count" : {$gt:1}} , { $set : {"test2" : "OK"}});
# 全部更新
db.col.update({"count" : {$gt: 3 }} , {$set : {"test2" : "OK"} });
3.2版本以后
# 只更新第一条记录
db.user.updateOne({'name':'lisi'}, {$inc:{'age':5}})
# 更新多条
db.user.updateMany({'name':'lisi'}, {$inc:{'age':5}})
REMOVE 文档的删除
3.2 版本之前
#默认将所有都匹配到的数据进行删除
db.集合名.remove(条件)
#只删除 第一个匹配到的数据
db.集合名.remove(条件,1)
# 清空集合
db.集合名.remove({})
3.2 版本之后
#默认将所有都匹配到的数据进行删除
db.user.deleteMany({'age':{$gt: 0}})
#只删除 第一个匹配到的数据
db.user.deleteOne({'age':{$gt: 0}})
数据库删除与退出
- 数据库删除
删除之前 最好use一下
db.dropDatabase()
- 数据库的退出
exit
Python操作MongoDB
- 安装库
pip install pymongo
- 导入 pymongo
from pymongo import MongoClient
- 连接 MongoDB
conn = MongoClient("localhost")
MongoClient(host='127.0.0.1',port=27017)
- 连接数据库
db = conn.test
- 连接集合
collection = db.user
- 案例
from pymongo import MongoClient
# 连接mongodb
conn = MongoClient('localhost')
# 选择数据库
db = conn.test
# 插入一条数据
data = db.user.insert_one({"name": "lucky", 'age': 18, 'sex': 'man'})
# 插入多条数据
data = db.user.insert_many([{"name": "zhangsan", 'age': 20, 'sex': 'women'},{"name": "lucky", 'age': 18, 'sex': 'man'}])
# 查询所有
data = db.user.find()
print(next(data))
for i in data:
print(i)
# 查询一条
data = db.user.find_one()
# 添加条件查询
data = db.user.find({"name": "lucky"})
# 模糊查询
data = db.user.find({"name": re.compile('l')})
data = db.user.find({"name": re.compile('z')})
# 修改一条
data = db.user.update_one({'name': 'lucky'},{'$set':{'age': 20}})
# 修改多条
data = db.user.update_many({'name': 'lucky'},{'$set':{'age': 18}})
# 删除一条
data = db.user.delete_one({'name': 'zhangsan'})
# 删除多条
data = db.user.delete_many({'name': 'lucky'})
conn.close()