作者 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术语解释/阐明
databasedatabase数据库
tablecollection数据库表/汇合
rowdocument数据库记录行/文档
columnfield数据字段/域
indexindex索引
table joins表连贯,MongoDbB不反对
primary keyprimary 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({})