MongoDB简单使用

Posted anyux

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB简单使用相关的知识,希望对你有一定的参考价值。

MongoDB数据库默认是没有用户名及密码的,即无权限访问限制。为了方便数据库的管理和安全,需创建数据库用户。

用户创建语法格式

{
user: "<name>",
pwd: "<cleartext password>",
customData: { <any information> },
roles: [{ role: "<role>",db: "<database>" } | "<role>",]
}
  • user字段:用户的名字;必填
  • pwd字段:用户的密码;必填
  • cusomData字段:为任意内容,例如可以为用户全名介绍;
  • roles字段:指定用户的角色,可以用一个空数组给新用户设定空角色;必填
  • roles 字段,可以指定内置角色和用户定义的角色。必填
 #常用角色说明见官方文档

https://docs.mongodb.com/manual/reference/built-in-roles/

 权限角色


飘红为常用角色

read
:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限

 

 创建超级管理员

管理所有数据库,必须要进入到admin下创建(use admin),删除时也要到相应的库下操作

mongo
#admin下创建用户
use admin
db.createUser(
{user: "root",
pwd: "root",
roles: [ { role: "root", db: "admin" } ]}
)
#test下创建用户
use test
db.createUser(
{
user: "test",
pwd: "test",
roles: [ { role: "root", db: "test" } ]
}
)
#查看用户
show users;
#删除用户
> db.dropUser(root);
true
> show users;

 

 验证用户存在性

#:用户创建完成后需在配置文件打开auth验证并重启后生效。

vim /application/mongodb/conf/mongodb1.conf
security:
  authorization: enabled

 

方法1

  数据库内验证

> use admin
switched to db admin
> db.auth("root","root");
1
#查看系统用户表中数据,查看超管权限只能在admin数据库下进行
#
所有用户信息都存储在admin数据库下的system.user中

> db.system.users.find().pretty()
{
    "_id" : "admin.root",
    "user" : "root",
    "db" : "admin",
    "credentials" : {
        "SCRAM-SHA-1" : {
            "iterationCount" : 10000,
            "salt" : "9ed3ClyZPbThtzzDpqbg9w==",
            "storedKey" : "QdoewI/2uhUmwjJUbHoPSA+Cleo=",
            "serverKey" : "pC8yOq1gUaH7a+zIEycElPJINy0="
        }
    },
    "roles" : [
        {
            "role" : "root",
            "db" : "admin"
        }
    ]
}

 

方法2

  数据库外验证

[[email protected] ~]$ mongo -uroot -proot admin 
MongoDB shell version: 3.2.8
connecting to: admin

 

  定义指定数据库权限验证 ,只读用户

 

[[email protected] ~]$ mongo -utest -ptest test
> db.createCollection(b); #创建表
{ "ok" : 1 }
> show tables; #显示表
b
> db.b.insert({"2":"b"}) #插入数据
WriteResult({ "nInserted" : 1 })
> db.b.find().pretty();#格式化打印数据
{ "_id" : ObjectId("5a4dd8d22a31eab1f0bbdc67"), "2" : "b" }
> db.b.remove({})#删除数据
WriteResult({ "nRemoved" : 1 })
> db.b.find().pretty();

 创建对多个数据库的读写权限

use app
db.createUser(
  {
    user: "app",
    pwd: "app",
    roles: [ { role: "readWrite", db: "app" },
                  { role: "read", db: "test" }
           ]
  }
)
#app用户登录测试

 删除用户

删除登录数据库的用户,需要先use 数据库,再删除它
删除app用户:先登录到admin数据库
# mongo -uroot –proot 10.0.0.131/admin
use app
db.dropUser("app")

 SQL语言与CRUD语言对照

 

MongoDB CRUD 操作 http://www.mongoing.com/docs/crud.html

schema

 

SQL Schema Statements

MongoDB Schema Statements

CREATE TABLE users (

id MEDIUMINT NOT NULL

AUTO_INCREMENT,

user_id Varchar(30),

age Number,

status char(1),

PRIMARY KEY (id)

)

Implicitly created on first insert() operation. The primary

key _idis automatically added if _id field is not specified.

db.users.insert( {

user_id: "abc123",

age: 55,

status: "A"

} )

However, you can also explicitly create a collection:

db.createCollection("users")

ALTER TABLE users

ADD join_date DATETIME

在Collection 级没有数据结构概念。然而在 document级,可以通过$set在

update操作添加列到文档中。

db.users.update(

{ },

{ $set: { join_date: new Date() } },

{ multi: true }

)

ALTER TABLE users

DROP COLUMN join_date

在Collection 级没有数据结构概念。然而在 document级,可以通过$unset

在update操作从文档中删除列。

db.users.update(

{ },

{ $unset: { join_date: "" } },

{ multi: true }

)

CREATE INDEX idx_user_id_asc

ON users(user_id)

db.users.createIndex( { user_id: 1 } )

CREATE INDEX

idx_user_id_asc_age_desc

ON users(user_id, age DESC)

db.users.createIndex( { user_id: 1, age: -1 } )

DROP TABLE users

db.users.drop()

 插入语句

 

SQL INSERT Statements

MongoDB insert() Statements

INSERT INTO

users(user_id,

age,

status)

VALUES ("bcd001",

45,

"A")

db.users.insert(

{ user_id: "bcd001", age:

45, status: "A" }

)


查询类

 

SQL SELECT Statements

MongoDB find() Statements

SELECT *

FROM users

db.users.find()

SELECT id,

user_id,

status

FROM users

db.users.find(

{ },

{ user_id: 1, status: 1, _id: 0 }

)

SELECT user_id, status

FROM users

db.users.find(

{ },

{ user_id: 1, status: 1 }

)

SELECT *

FROM users

WHERE status = "A"

db.users.find(

{ status: "A" }

)

SELECT user_id, status

FROM users

WHERE status = "A"

db.users.find(

{ status: "A" },

{ user_id: 1, status: 1, _id: 0 }

)

数据更新操作  

 

SQL Update Statements

MongoDB update() Statements

UPDATE users

SET status = "C"

WHERE age > 25

db.users.update(

{ age: { $gt: 25 } },

{ $set: { status: "C" } },

{ multi: true }

)

UPDATE users

SET age = age + 3

WHERE status = "A"

db.users.update(

{ status: "A" } ,

{ $inc: { age: 3 } },

{ multi: true }

)

数据删除操作

 

SQL Delete Statements

MongoDB remove() Statements

DELETE FROM users

WHERE status = "D"

db.users.remove( { status: "D" } )

DELETE FROM users

db.users.remove({})



















以上是关于MongoDB简单使用的主要内容,如果未能解决你的问题,请参考以下文章

mongodb关联查询

ios - Heroku 和 MongoDb 上的自定义解析服务器错误 3080:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项

创建自己的代码片段(CodeSnippet)

无法在 MongoDB(猫鼬)文档中追加数组

为啥这段代码会泄露? (简单的代码片段)

在 Spring MongoDB 的 ReplaceRoot 管道阶段使用 $mergeObjects