作者 changhao
邮箱 <wu_chang_hao@qq.com>
版本1.0
知识点
- Mongodb装置
- mongo命令应用
- mongo根底操作
- pymongo 模块应用
Mongodb装置
windows 装置形式
1). 下载安装包
MongoDB 提供了可用于 32 位和 64 位零碎的预编译二进制包,你能够从MongoDB官网下载安装,MongoDB 预编译二进制包下载地址:https://www.mongodb.com/downl...
2). 装置
指定装置门路,我这里装置在D:\software\mongodb,增加D:\software\mongodb\bin到环境变量中。
3). 新建目录与文件夹
D:\software\mongodb\data\dbD:\software\mongodb\log\mongod.log
4). 新建配置文件D:\software\mongodb\mongod.cfg
systemLog: destination: file path: "D:/software/mongodb/log/mongod.log" logAppend: truestorage: journal: enabled: true dbPath: "D:/software/mongodb/data/db"net: bindIp: 0.0.0.0 port: 27017setParameter: enableLocalhostAuthBypass: false
5). 制作零碎服务
mongod --config "D:\software\mongodb\mongod.cfg" --bind_ip 0.0.0.0 --install
或者间接在命令行指定配置
mongod --bind_ip 0.0.0.0 --port 27017 --logpath D:\software\mongodb\log\mongod.log --logappend --dbpath D:\software\mongodb\data\db --serviceName "mongodb" --serviceDisplayName "mongodb" --install
6). 启动MongoDB服务
net start MongoDBnet stop MongoDB
7). 登录MongoDB
mongo链接:http://www.runoob.com/mongodb/mongodb-window-install.html 当没有账号密码登录的时候,默认就是管理员登录。,因为刚刚做零碎服务install的时候没有指定 --auth(没有指定则没有权限认证这一说),(相当于mysql跳过受权表启动一样)
8). 创立有权限的用户
use admindb.createUser( { user: "root", # 这个root能够轻易写 pwd: "123", roles: [{role: "root", db: "admin"}] # 权限,role是root阐明是管理员, })use testdb.createUser( { user: "test", pwd: "123", roles: [ {role: "readWrite", db: "test"}, # 针对test库有读写权限,操作本人的库有读写权限 {role: "read", db: "db1"} ] # 针对db1库读权限,操作其余库有读权限 })
9). 重启数据库
mongod --removemongod --config "D:\software\mongodb\mongod.cfg" --bind_ip 0.0.0.0 --install --auth# 或者mongod --bind_ip 0.0.0.0 --port 27017 --logpath D:\software\mongodb\log\mongod.log --logappend --dbpathD:\software\mongodb\data\db --serviceName "MongoDB" --serviceDisplayName "MongoDB" --install --auth
10). 从新登录
# 形式一mongo --port 27017 -u "root" -p "123" --authenticationDatabase "admin"# 形式二:在登录之后用db.auth("账号","明码")登录mongouse admindb.auth("root","123")
Linux 装置形式
1). 装置依赖
yum install -y libcurl openssl
2). 下载MongoDB源码装置或yum管理器装置
# mongodb源码下载地址https://www.mongodb.com/download-center#community# 或yum 装置yum install -y mongodb
3). 创立数据库目录
# 创立目录,并设置用户权限mkdir -p /var/lib/mongomkdir -p /var/log/mongodbchown `whoami` /var/lib/mongochown `whoami` /var/log/mongodb
4). 配置mongo服务参数, 容许所有ip拜访
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --bind_ip_all --fork
5). 或者批改配置文件 /etc/mongod.conf
# mongod.conf # for documentation of all options, see:# http://docs.mongodb.org/manual/reference/configuration-options/# Where and how to store data.storage: dbPath: /var/lib/mongo journal: enabled: true# engine:# mmapv1:# wiredTiger:# where to write logging data.systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log# network interfacesnet: port: 27017 bindIp: true# how the process runsprocessManagement: timeZoneInfo: /usr/share/zoneinfo
6). 后盾启动
mongod -f /etc/mongod.conf &
7). 登录mongodb
# 登录mongo# 创立数据库 testuse test# 查看以后的数据库db
mongo命令应用
# 连贯到任何数据库configmongo 127.0.0.1:27017/config# 不连贯任何数据库mongo --nodb# 启动之后,在须要时运行new Mongo(hostname)命令就能够连贯到想要的mongod了conn = new Mongo('127.0.0.1:27017')db = conn.getDB('admin')# 显示以后数据库所有的数据库show databases 或者 show dbs# 应用某个数据库,不存在则创立use database# 删除数据库db.dropDatabase()
mongo根底操作
在MongoDB中相干术语的解释和sql术语对应关系
SQL术语 | MongoDB术语 | 解释/阐明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/汇合 |
row | document | 数据库记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连贯,MongoDbB不反对 | |
primary key | primary key | 主键,MongoDB主动将_id字段设置主键 |
有一些数据库名是保留的,能够间接拜访这些特殊作用的数据库
- admin: 从权限的角度来看,这是"root"数据库。要是将一个用户增加到这个数据库,这个用户主动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比方列出所有的数据库或者敞开服务器。
- local: 这个数据永远不会被复制,能够用来存储限于本地单台服务器的任意汇合
- config: 当Mongo用于分片设置时,config数据库在外部应用,用于保留分片的相干信息。
汇合(表)的增删改
use test# 减少表内容db.table1.insert({"a":1})db.table2.insert({"b":2})# 查看表show collections 或者 show tables# 删除db.user.info.help() # 查看帮忙db.user.info.drop()# 帮忙, 不明确就help()db.table.help() # 举例
减少操作
# 插入单条数据user0 = { "name": "changhao", "age": "23", "hobbies": ['music', 'read', 'dancing'], "addr": { "country": 'China', "city": 'BJ', }}# 形式一db.table1.insert(user0)# 形式二db.table1.insertOne(user0)# 插入多条数据user1 = { "_id": 1, "name": "changhao1", "age": "23", "hobbies": ['music', 'read', 'dancing'], "addr": { "country": 'China', "city": 'BJ', }}user2 = { "_id": 2, "name": "changhao2", "age": "23", "hobbies": ['music', 'read', 'dancing'], "addr": { "country": 'China', "city": 'BJ', }}# 形式一db.table1.insertMany(user1, user2)# 形式二db.table1.insertMany([user1, user2])
查找操作
# 查看所有记录db.table1.find()# 丑化输入db.table1.find().pretty()# 查找符合条件的所有db.table1.find({"name": "changhao"})# 查找符合条件的第一条db.table1.findOne({"name": "changhao"})
条件查找-比拟运算
# id = 1db.table1.find({"_id":1})# id != 1db.table1.find({"_id": {"$ne": 1}})# id < 2db.table1.find({"_id": {"$lt": 1}})# id > 1db.table1.find({"_id": {"$gt": 1}})# id >= 1db.table1.find({"_id": {"$gte": 1}})# id <= 2db.table1.find({"_id": {"$lte": 1}})
条件查找-逻辑运算
#逻辑运算:$and,$or,$not# id >=3 and id <= 4db.table1.find({"_id": {"$gte":3, "$lte":4}})# id >=3 and id <=4 and age >=40db.table1.find({ "_id":{"$gte":3,"$lte":4}, "age":{"$gte":40}})或者db.table1.find({"$and":[ {"_id":{"$gte":3,"$lte":4}}, # 一个字典就是一个条件 {"age":{"$gte":40}}]})# id >=0 and id <=1 or id >=4 or name = "changhao"db.table1.find({"$or": [{"_id": {"$lte": 1, "$gte": 0}},{"_id": {"$gte": 4}},{"name": "changhao"}]})# id % 2 = 1 奇数db.table1.find({"_id": {"$mod": [2, 1]}})# 偶数, 取反db.table1.find({"_id": {"$mod": [2, 1]}})
正则匹配
db.table1.find({ "name":/^jin.*?(g|n)$/i})
排序、跳过、截取
# 排序, 依据年龄排序, 1位正序, 1位倒序db.table1.find().sort("age": 1)# 选取两条数据db.table1.find().limit(2)# 跳过查问的数据的前2条db.table1.find().skip(2)db.table1.sort({"age":-1}).skip(0).limit(2)
记录批改
语法格局如下
db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> })
参数阐明:
- query: 相当于where条件
- update: update的对象和一些更新的操作符(如inc...等, 相当于set前面的)
- upsert: 可选, 默认为false, 代表如果不存在update的记录不更新也不插入,设置为true代表插入。
- multi: 可选,默认false,代表只更新找到的第一条记录,设置true, 代表更新找到的全副记录。
- writeConcern:可选, 抛出异样的级别。
实战语句
# 1.笼罩式db.table1.update({'age': 20}, {"name": "changhao"})# 2. 这一种简略的更新,齐全替换匹配var obj = db.table1.findOne({"_id": 2})obj.username = obj.name + 'test'obj.age = 23db.table1.update({"_id": 1}, obj)
设置
# 设置 $set通常文档只会有一部分须要更新。能够应用原子性的更新修改器,指定对文档中的某些字段进行更新。更新修改器是种非凡的键,用来指定简单的更新操作,比方批改、减少后者删除# set name="changhao" where id = 2db.table1.update({'_id': 2}, {"$set": {"name": "changhao", "age": 23}, {"upsert":true})# 没有匹配胜利则新增一条{"upsert":true}db.table1.update({'_id':2},{"$set":{"name":"changhao", "age":23}},{"upsert":true})# 默认只改匹配胜利的第一条,{"multi":改多条}db.table1.update({'_id':{"$gt":4}},{"$set":{"age":28}})db.table1.update({'_id':{"$gt":4}},{"$set":{"age":38}},{"multi":true})# 批改内嵌文档,把名字为test的人所在的地址国家改成Japandb.table1.update({'name':"test"},{"$set":{"addr.country":"Japan"}})# 把名字为test的人的地2个喜好改成piaodb.table1.update({'name':"test"},{"$set":{"hobbies.1":"piao"}})# 删除test的喜好,$unsetdb.table1.update({'name':"test"},{"$unset":{"hobbies":""}})
减少和缩小
# 减少和缩小 $inc# 1.所有人年龄减少一岁db.table1.update({}, { "$inc":{"age":1} }, { "multi":true })# 2.所有人年龄缩小5岁db.user.update({}, { "$inc":{"age":-5} }, { "multi":true })
删除
# 删除多个中的第一个db.table1.deleteOne({"age":8})# 删除国家为China的全副db.table1.deleteMany({"addr.country": "China"})
pymongo 模块应用
连贯数据库
import pymongoclient = pymongo.MongoClient("192.168.158.137", 27017)# 显示服务器上的所有数据库dblist = client.database_names()print(dblist)# 打印信息:['admin', 'config', 'local', 'test']# 连贯数据库,获取库,如果库名存在,则应用,不存在创立db = client['test']
减少数据库内容
# 减少单条mydict = {"name": "changhao001", "age": 23}res = db.table1.insert_one(mydict)print(res.inserted_id) # 返回ObjectId对象# 减少多条mylist = [{"name": "changhao002", "age": 23}, {"name": "changhao003", "age": 23}]res = db.table1.insert_many(mylist)print(res.inserted_ids) # 返回ObjectId对象列表
查问语句
查问一条语句
# 查问一条数据res1 = db.table1.find_one({'name': 'changhao1'})print(res1.items()) # 查看匹配的数据内容
查问汇合中的所有数据或多条
# 查问汇合中的所有数据或多条res2 = db.stu.find({}) # 查问所有记录res3 = db.stu.find({"age": 23})
高级查问
# 年龄大于20岁的myquery = {"age": {"$gt": 20}}res = db.table1.find(myquery)
正则表达式查问
# 读取 name 字段中第一个字母为 "c" 的数据myquery = {"name": {"$regex": "^c"}}res = db.table1.find(myquery)# 遍历出匹配的数据for x in res: print(x)
查问后果排序,跳过, 截取条数
# 查问后果的排序,跳过,和截取sort_res = list(db.table1.find().sort("age", pymongo.DESCENDING)) # 查问所有后果,并依据年龄的降序排序skip_res = list(db.table1.find().skip(2)) # 查问所有后果,并过滤掉前两条limit_res = list(db.table1.find().limit(2)) # 查问所有后果,并截取前两条# 分页成果pagination_res = list(db.table1.find().sort("age", pymongo.DESCENDING).limit(2).skip(2))
批改语句
# 查问到间接更新设置值res = db.table1.update_one({'_id': 1}, {"$set": {"name": "changhao_update"}})print(res.modified_count)# 查问到记录, 在字典中增加值res = db.table1.find_one({"name": "changhao_update"})res['age'] = 20# 将值更新到记录中res = db.table1.update_one({"name": "changhao_update"}, {"$set": res})print(res.modified_count)
删除语句
删除单条
# 删除后果中的一条res = db.table1.delete_one({"name": "changhao_update"})print(res.deleted_count)
删除多条
# 删除多条, 正则匹配的数据query = {"name": {"$regex": "^c"}}res = db.table1.delete_many(query)print(res.deleted_count)# 删除所有del_res = db.table1.delete_many({})