1.数据库操作:
1.数据库的连接:
*mongodb://admin:123456@localhost/
2.数据库的创建/使用/删除
*mongo 命令进入客户端
*use demo 如果demo库不存在则创建,如果存在则切换到该数据库
*show dbs 查看所有的数据库
*db.dropDatabase() 删除数据库,这个括号里是不接参数的。
2.数据库集合操作:
创建/删除集合(创建表)
*创建
*db.createCollection("test") 默认不加选项
*db.createCollection("demo_tb",{capped:true,autoIndexId:true,size:1024,max:1000})
*capped 默认为false,如果设置为true,则会创建固定大小的集合。当超过限制时,会自动覆盖最早的文档。
*autoIndexId,会创建_id列为索引
*size 最大字节数
*max 最大记录数
*或者直接执行插入操作。这时候会自动创建集合。
*删除
*db.集合名.drop()
3.数据库文档(记录)的操作:
数据库记录的增/删/改
*增
*mongodb存储的是类json的二进制类型,称为bson
*db.集合名.insert() 插入操作,可以以列表的形式多插入几条数据,因此在新版本中有两个用法:
*db.集合名.insertOne()
*db.集合名.insertMany()
*改
db.集合名.update()
*db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
*<query> 指定范围类似where
*update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
*upsert 默认为false指定如果没有该更新记录,是否插入
*multi:默认为false,指定的是更新第一条匹配记录,如果设置为true,则是更新全部匹配的记录。
*删
db.集合名.remove({query},justOne)
*{query},删除的条件,类似于where
*justOne 是否删除1条
最新的指导文档:
*db.集合名.deleteOne({query})
*db.集合名.deleteMany({query})
数据库的查询
*db.集合名.find() 全部输出
*db.集合名.find().pretty() 全部格式化输出
*db.集合名.find({query}).pretty() 带查询条件的格式化输出
*db.集合名.find({"score":{$gt/$gte/$lt/$lte:50}}).pretty() >/>=/</<=
*db.集合名.find({query,query}).pretty() and 操作
*db.集合名.find({$or:[{query1},{query2}]})
实例:
*db.scores.find({"score":{$gt:50},$or:[{"sex":1},{"name":"小龙女"}]})
*db.scores.find({"score":{$gt:50},$or:[{"sex":1},{"name":"小龙女"}]}).limit(2)
*db.scores.find({"score":{$gt:50},$or:[{"sex":1},{"name":"小龙女"}]}).limit(1).skip(2)
*db.scores.find({"score":{$gt:50},$or:[{"sex":1},{"name":"小龙女"}]}).sort({"sex":-1})
以上实例为limit()、skip()、sort()用法。
*sort({area:1})升序排序,-1为倒序排序
4.创建索引
*db.scores.ensureIndex({"name":1/-1},{"backgound":true})
*db.stu.find({name:'宝宝'}).explain('executionStats') 可通过explain来查看执行多长时间
*{"name":1/-1} 1为升序,-1为降序
5.聚合
---缺少
6.备份与恢复
*备份:mongodump -h 127.0.0.1 -d demo /home/python/ 生成后为数据库命名的文件夹,有元数据与数据。
*恢复:mongorestore -h 127.0.0.1 -d test1 /home/python/demo test1可以与原备份名不同。如果相同将会删除备份后的所有数据。
7.集群同步
*新建两个文件夹 t1、t2
*启动mongo
*mongod --bind_ip 192.168.164.133 --port 27018 --dbpath ./t1 --replSet rs0
*mongod --bind_ip 192.168.164.133 --port 27019 --dbpath ./t2 --replSet rs0 这里rs0名字必须和第一个相同
*链接 27018.21019 端口的mongodb
*mongo --host 192.168.164.133 --port 27018
*mongo --host 192.168.164.133 --port 27019
*初始化:
*假设27018端口为主,在27018端口执行:rs.initiate()初始化,并执行rs.add('192.168.164.133:27019')
*在27019上执行rs.slaveOk()
*此时已经搭建好集群了。
*在主节点上插入数据,在从节点使用命令查询。看是否在从节点能看到数据。
*主动down掉主节点,在启动主节点,看主备节点是否切换。
8.性能监控
*mongostat 3
*mongotop 3
9.python连接mongo
#coding=utf-8
'''
Created on 2018年5月23日
@author: BH Wong
'''
from pymongo import MongoClient
def mongoConn():
client = MongoClient('mongodb://192.168.164.133:27017/')
return client
def insert_mongo(conn,record):
db = conn.test
res = db.test
res.insert_one(record)
def find_mongo(conn):
db = conn.test
res = db.test.find()
for each in res:
print(each)
if __name__ == '__main__':
client = mongoConn()
user = {'name':'BHWong','age':28}
insert_mongo(client, user)
find_mongo(client)