文中代码没有经过测试
以服务形式启动MongoDB:
mongd --dbpath "d:\mongodb\data\db" --logpath "d:\mongodb\data\log\MongoDB.log" --install --serviceName "MongoDB"
NET START MongoDB
NET STOP MongoDB
mongd --dbpath "d:\mongodb\data\db" --logpath "d:\mongodb\data\log\MongoDB.log" --remove --serviceName "MongoDB"
MongoDB简单命令:
# save(), insert(), update(),若操作的数据库不存在,则系统会自动创建相应的数据库
# MongoDB中的collection,主键是_id,系统会默认创建
mong.exe
> show dbs
> use dbname
> show collections
# save()检查是否存在_id的数据,存在,则更新词条数据
> db.users.save({"_id":"123456", "name":"zhangsan"})
# insert()直接插入数据,_id冲突则报错
> db.users.insert({"_id":"123456", "name":"lisi", "age":10})
# 如果要更新的数据不存在,则会插入$set数据
> db.users.update({"name":"zhangsan"}, {$set:{"name":"zhangsan", "age":15}})
> db.users.find().count()
> db.users.find({"name":"zhangsan"}).pretty()
> db.users.remove({"name":"zhangsan"})
Python操作MongoDB
import pymongo
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.test_db
myset = db.test_set
# 插入数据
myset.insert({"name":"zhangsan", "age":15})
users = [{"name":"zhangsan", "age":15},{"name":"lisi", "age":10}]
myset.insert(users)
# 查询数据
for i in myset.find({}):
print i
# 查询单条数据
print( myset.find_one({"name":"zhangsan"}))
MongoDB权限管理
mongod --auth --logpath " " --logappend --dbpath " " --directoryperdb --reinstall
# 重启mongod
use admin
db.createUser({user:'admin', pwd:'admin', roles:[{role:'userAdminAnyDatabase', db:'admin'}]})
db.createUser({user:'test', pwd:'test', roles:[{ role: "clusterAdmin", db: "admin" }, { role: "readAnyDatabase", db: "admin" }, "readWrite"]})
db.updateUser('username', { roles:[{role:'role', db:'database'}, {...}], pwd:'****'})
# 测试是否成功
mongo -u accountname -p pwd --authenticationDatabase dbname
内置角色:
1. 数据库用户角色:read、readWrite;
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 备份恢复角色:backup、restore;
5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超级用户角色:root
// 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
7. 内部角色:__system
python MongoDB权限管理:
# 方法一
client = MongoClient('localhost', 27017)
db_auth = client.admin
db_auth.authenticate('account', 'password')
db = client.dbname
# 方法二
client = MongoClient("mongodb://account:pwd@localhost:27017")
索引
db.test.ensureIndex({'username':1}) # 建立索引
db.test.getIndexes() # 查看索引建立是否成功
db.test.dropIndex({'username':1}) # 删除某个索引
db.test.dropIndexes() # 删除test上的所有索引
db.test.ensureIndex('data.w.t':1) # 嵌套文档的索引
其他
更新多条满足条件的数据:
db.col.update({"name":"zhangsan"}, {$set:{"name":"zhangsan", "age":15}}, {multi:true})
查询特定字段:
# 如果要查询特定字段,除了_id字段,其他字段默认是不显示的。_id需要显式说明不显示
db.users.find({'age':21},{'name':1, 'age':1, '_id':0})
模糊查询:
# LIKE "%A%" find({'username':/A/})
# LIKE "A%" find({'username':/^A/})
# MongoDB不适合模糊查询,'A%'之外的查询,都不会使用索引,一般比mysql之类的慢很多
db.article.find({'title':{$regex:/测试*/i}})