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)