MongoDB基础语法

MongoDB基础语法

概念碰撞

SQL概念Mongo概念实际意思
databasedatabase数据库
tablecollection就是一类数据的集合
rowdocument一条数据
columnfield某一条数据的某一个属性名
indexindex索引
primary keyprimary key主键,mongo会自动创建_id作为document的主键

数据类型

Mongodb支持很多种数据类型

类型描述
String字符串类型
Integer整数
Float单精度浮点数
Double双精度浮点数
Boolean布尔
Array数组
TimeStamp时间戳
Object内嵌文档
Date日期
Object ID对象id
BinaryData二进制数据

基础语法

创建数据库

# 切换数据库,如果没有则创建
use database_name

这时候查看一下所有数据库,发现并没有出现zhima数据库,这是因为这个数据库还在内存中,没有落盘

在这里插入图片描述

创建集合

# 创建study集合
db.createCollection('study')

这个时候再看下所有数据库,就会发现zhima数据库了

在这里插入图片描述

删除集合

# 删除study集合
db.study.drop()

在这里插入图片描述

删除数据库

# 删除当前所在数据库
# 删除之前可以先执行以下命令确保你删除的是你要删除的数据库
# use 你要删除的数据库名
dp.dropDatabase()

CUD

想要对document进行CRUD,首先要创建数据库,接着创建集合,然后才能操作document不是

# 创建zhima数据库
use zhima
# 创建student集合
db.createCollection('student')

我们首先明确student有哪些属性

属性名类型含义
idObject ID主键
nameString姓名
ageInteger年龄
birthdayDate生日
hobbiesArray兴趣爱好
Create

用以下语句创建一个学生

db.student.insert({
    name:'kerwin',
    age: 22,
    birthday: '2002-05-22',
    hobbies: ['coding','music','badminton']
})

在这里插入图片描述

这里先介绍一下最简单的一条用于查询的语句,不然我怎么知道我插入成没成功啊

db.student.find()

在这里插入图片描述

Update

下面修改一下kerwin同学的姓名

db.student.update(
    {
        _id:ObjectId("64d1ee8455ce8759d8deb95c")
    },
    {
    	name: 'zhima'
    }
)

查询后发现原本的属性都不见了,这种更新叫全量更新

在这里插入图片描述

如果只想修改姓名这一个字段的属性就需要用以下语法

db.student.update(
    // 指定要更新哪些符合要求的document
    {
        _id:ObjectId("64d1f04755ce8759d8deb95d")
    },
    // 定义更新规则
    {
        $set:
        {
            name:"zhima"
        },
        $inc:
        {
            age:1
        }
    }
)

在这里插入图片描述

Delete

删除符合要求的document

db.student.remove({name:"zhima"})

在这里插入图片描述

Retrieve

重头戏了,要知道,CUD都玩不出什么花样来

SQL里面可是把CUD操作并到了DML语句中,而查询语句可是单独叫DQL语句,可见他有多么重要

查询全部

查询集合中所有的文档(document),这个之前就看过了

db.student.find()

默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据

在这里插入图片描述

去重查询

查询去重后的数据

db.student.distinct("name")

在这里插入图片描述

按条件查询

查询指定条件的数据

 db.student.find({_id:ObjectId("64d1f26255ce8759d8deb971")})

在这里插入图片描述

查询年龄在23到24之间,并且姓名是Kerwin的学生记录

db.student.find({
    age:{
        $gte:23,
        $lte:24
    },
    name: "kerwin"
})

在这里插入图片描述

符号含义
$gt大于
$gte大于等于
$lt小于
$lte小于等于
$eq等于
模糊查询

mongodb不仅支持简单的模糊查询,还支持强大的正则表达式,语法很简单

// 正则表达式用\\包裹
// 查询姓名是k开头的l结尾的,并且指定返回的字段_id和name
db.student.find(
    {
        name:"\^k.*l$\"
    },
    {
        _id:1,
        name:1
    }
)
排序

按照指定字段排序后返回结果集

// 查询所有年龄大于23的学生,按照_id升序,age降序返回
db.student(
    {
        age: {
            $gte:23
        }
    }
).sort({
    _id:1,
    age:-1
})
分页查询

一页的数据是5条

在这里插入图片描述

查询第一页数据

db.student.find().skip(0).limit(5)

查询第二页数据

db.student.find().skip(5).limit(5)

在这里插入图片描述

or查询

查询年龄大于等于23或者小于15的

db.student.find({
    $or: [
        {age: {$gte:23}},
        {age: {$lte:15}}
    ]
})

索引

建立索引后可以很大程度的提高查询的效率

// 查看集合上的所有索引
db.student.getIndexes()

在这里插入图片描述

db.student.getIndexes()
db.student.reIndex()

在这里插入图片描述

// 删除指定索引
db.student.dropIndex("indexName")
// 删除所有索引
db.student.dropIndexes()

创建索引

// 建立联合索引,按照name升序,age降序
db.student.ensureIndex({name:1,age:-1})

用户

现在我们启动的mongodb是没有认证的,所有人都可以连接

为了安全,需要创建用户指定这个用户的登录名和密码,并且指定他有哪些库的哪些权限

MongoDB采用的是RBAC(Resource/Role Based Access Control),基于资源/角色的访问控制

每个用户有多个角色,一个角色具有多个操作资源的权限,从而达到了权限控制的目的

内置角色

mongodb提供了很多内置角色

在这里插入图片描述

有的角色只有admin库拥有

用户自己创建的数据库内置的角色只有以下这些

{
        "role" : "readWrite",
        "db" : "zhima",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
},
{
        "role" : "dbOwner",
        "db" : "zhima",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
},
{
        "role" : "userAdmin",
        "db" : "zhima",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
},
{
        "role" : "enableSharding",
        "db" : "zhima",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
},
{
        "role" : "read",
        "db" : "zhima",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
},
{
        "role" : "dbAdmin",
        "db" : "zhima",
        "isBuiltin" : true,
        "roles" : [ ],
        "inheritedRoles" : [ ]
}
创建用户

拥有admin库的userAdminAnyDatabase角色的用户

use admin;
db.createUser({ 
    user: "admin",  
    pwd: "admin",  
    roles: [ 
    	{ 
    		role: "userAdminAnyDatabase",
        	db: "admin" 
    	}
	]
})

拥有不受任何限制的用户

use admin;
db.createUser({
    user: "superuser",
    pwd: "supreuser",
	customData:{
    	description: "superuser"
	},
	roles: ["root"]
})

创建一个只能操作部分库的用户

use zhima;
db.createUser({
    user: "user001",
    pwd: "user001",
    customData:{
        name:'oridinary user'
    },
    roles:[
        {role:"readWrite",db:"db001"},
        {role:"readWrite",db:"db002"},
        'read'// 对其他数据库有只读权限
    ]
})

修改密码

db.changeUserPassword("user001","1234")

认证

db.auth("user001","1234")

查看当前登录用户

 > db.runCommand({connectionStatus:1})
{
        "authInfo" : {
                "authenticatedUsers" : [
                        {
                                "user" : "user001",
                                "db" : "zhima"
                        }
                ],
                "authenticatedUserRoles" : [
                        {
                                "role" : "readWrite",
                                "db" : "zhima"
                        }
                ]
        },
        "ok" : 1
}

mongodb启动的时候默认是关闭认证的,需要在启动的时候开启认证的选项

mongd --dbpath=..\data --auth
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芝麻\n

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值