MongoDB 杂

文中代码没有经过测试

以服务形式启动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}})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值