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

nticatedUsers" : [
{
“user” : “user001”,
“db” : “zhima”
}
],
“authenticatedUserRoles” : [
{
“role” : “readWrite”,
“db” : “zhima”
}
]
},
“ok” : 1
}


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

```bash
mongd --dbpath=..\data --auth
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
MongoDB基础语法包括使用条件操作符进行查询。其中包括使用$or操作符实现逻辑或查询。语法格式如下: ``` db.collection.find({ $or: [ { key1: value1 }, { key2: value2 } ] }) ``` 这个查询语句表示在集合中查找满足key1等于value1或key2等于value2的文档。 另外,还可以使用比较操作符进行条件查询。比如使用$lt操作符进行小于操作,$lte进行小于等于操作。例如: ``` db.collection.find({ likes: { $lt: 150 } }) ``` 这个查询语句表示在集合中查找likes字段小于150的文档。 此外,还可以结合多个条件进行查询,使用$or操作符和其他条件操作符一起使用。例如: ``` db.collection.find({ "likes": { $gt: 50 }, $or: [ { "by": "菜鸟教程" }, { "title": "MongoDB 教程" } ] }) ``` 这个查询语句表示在集合中查找likes大于50,并且by等于"菜鸟教程"或者title等于"MongoDB 教程"的文档。 以上就是MongoDB基础语法的简单介绍。根据需要,可以使用不同的条件操作符组合查询条件来满足特定的需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [20201207MongoDB - 创建数据库/删除数据库/创建集合/删除集合/插入文档/更新文档/删除文档/查询文档/条件...](https://blog.csdn.net/weixin_36810906/article/details/110792096)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

芝麻\n

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

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

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

打赏作者

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

抵扣说明:

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

余额充值