database 数据库
collection 数据库表/集合
document 数据记录行/文档
field 数据字段/域
index 索引
primary key 主键,mongodb自动将_id字段设置为主键
2.mongo的一些常用语法
创建数据库 : use Dataset_name
删除数据库 : db.dropDatabase()
创建集合 : db.createCollection(name, options)
查看已有集合 : show collections
删除集合 : db.collection.drop()
插入文档 : db.collection.insert(document)
查看已插入的文档 : db.collection.find()
查看格式化的文档 : db.collection.find().pretty()
更新已经存在的文档: db.collection.update()
删除文档: db.collection.remove()
查询语句: db.collection.find()
3.如何开启mongo rest (简单的web服务端)
sudo service mongod stop sudo mongod --dbpath /data/db --rest注意,如果/data/下没有db,你需要自己创建,否则会出错删除/tmp/mongodb-27017.sock如果还出错: ps -ef |grep mongo ,killmongo占用的全部进程 4.使用mongo rest 返回结果为 {
"offset" : 0,
"rows": [
],
"total_rows" : 0 ,
"query" : {} ,
"millis" : 0
}
https://stackoverflow.com/questions/28770609/mongodb-rest-api-returns-no-results
推荐了: http://restheart.org/
本文基于 Ubuntu 16.04, MongoDB3.4.9 环境完成。
安装
连接
mongo -u user -p passwd --host 127.0.0.1 --port 27017 admin
在 /etc/mongod.conf 中修改 bindIp: 0.0.0.0,允许远程连接mongo。
用户管理
1. MongoDB是没有默认管理员账号,所以要先添加管理员账号,再开启权限认证。
2. 切换到admin数据库,添加的账号才是管理员账号。
3. 用户只能在用户所在数据库登录,包括管理员账号。
4. 管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以。
添加管理员账号:
use admin
db.createUser(
{
user: "admin",
pwd: "passwd",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
开启权限认证:
sudo vim /etc/mongod.conf
添加以下配置:
security:
authorization: enabled
然后 sudo service mongod restart 重启mongo,再启动mongo时如果没有用户名密码则无法查看db。
认证:
use admin
db.auth("admin", "passwd")
认证完成后可以正常访问db。
添加普通用户:
use test
db.createUser(
{
user: "test",
pwd: "test",
roles: [ { role: "readWrite", db: "test" } ]
}
)
删除用户:db.dropUser()(删除当前db下的user),db.system.users.remove({user:"xxx"})这种方式已经在2.6及以后的版本中被禁止了。
查看当前用户:db.runCommand({connectionStatus : 1})
查看用户:show users(只显示当前db下的user)或者db.system.users.find()(只有在admin db下才有用,显示所有user,因为创建的用户信息保存在了admin库)
修改密码:db.changeUserPassword("user", "passwd")
用户授权:db.grantRolesToUser(
"accountUser01",
[
{ role: "read", db: "records" }
]
)
取消用户授权:db.revokeRolesFromUser(
"accountUser01",
[
{ role: "readWrite", db: "accounts" }
]
)
1. 内建的角色
2. 数据库用户角色:read、readWrite;
3. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
4. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
5. 备份恢复角色:backup、restore;
6. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
7. 超级用户角色:root // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
8. 内部角色:__system
角色说明:
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
基本命令
创建数据库:use DATABASE_NAME
查看所有数据库:show dbs
查看当前数据库下所有表:show collections
> db
显示当前数据库
插入文档:
db.COLLECTION_NAME.insert({xxx})
更新:
db.COLLECTION_NAME.update(...)
覆盖:
db.COLLECTION_NAME.save(...)
查询:
db.COLLECTION_NAME.find(query, projection)
db.COLLECTION_NAME.findOne()
db.COLLECTION_NAME.find().pretty() // readable json
projection 指定字段返回:_id 默认会返回,如果不需要,设置为0,其他字段设置为1的会返回。例如:find({}, {"xx": 1, "_id": 0} // 只显示 xx 字段
查询条数:
db.COLLECTION_NAME.find().count()
操作符:
$gt $lt $gte $lte
$type
limit 和 skip:
db.COLLECTION_NAME.find().limit(1).skip(2) // 从第三个开始,显示一个
排序:
db.COLLECTION_NAME.find().sort({KEY:1}) // 1升序,-1降序
删除数据库:
db.dropDatabase() // 删除当前数据库
删除collection:
db.COLLECTION_NAME.drop() // 不仅删除集合的文档,也会删除集合本身,同时也会删除在集合上创建的索引。
db.COLLECTION_NAME.remove(query, justOne, writeConcern) // 将集合中的文档删除,但不删除集合本身,也不删除集合的索引。
索引:
db.COLLECTION_NAME.ensureIndex({KEY:1})
聚合:
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
主键:
db.COLLECTION_NAME.createIndex( { 'lastname': 1, 'firstname': 1 }, { unique: true } )
2017.09.04
没有评论:
发表评论