MongoDB使用详解_1_基本使用

1.核心概念

1.1库(Database)

MongoDB中的库就类似于传统关系型数据库中库的概念,用来通过不同库隔离不同应用数据

Mongodb中可以建立多个数据库,每一个库都有自己的集合(Collection)和权限,不同的数据库也放置在不同的文件中,默认的数据库为test,数据库存储在启动指定的data目录中。

1.2集合(Collection)

集合就是MongoDB文档组,类似于RDBMS(关系型数据库)中的概念

集合存在于数据库中,一个库中可以创建多个集合,每个集合没有固定的结构,这意味着可以对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据会有一定的关联性

1.3文档(Document)

文档集合中一条条记录(相当于数据库表中的一条条记录)是一组键值(key-value)对(即BSON),MongoDB的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是MongoDB非常突出的特点。

一个简单的文档例子

{
    
    "name":"张三", "age":"23"}

1.4关系总结

RDBMS MongoDB
数据库 数据库
集合
文档
字段

2.基本使用

2.1库

认证

客户端连接上服务器默认进入test数据库,但是如果我们在配置文件中开启了认证·(auth = true) 那么我们需要先切换到admin数据库进行认证,参考,

查看所有库

show databases; 
show dbs

演示

在这里插入图片描述

注意

admin:从权限的角度来看,这是"root"数据库,要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限,一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器

local:这个数据永远不会被复制,可以用来存储仅限于本地单台服务器的任意集合

config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息

创建数据库 & 查看当前使用的数据库

use 库名
db; 

在这里插入图片描述

注意:use代表创建并使用当库中没有数据时默认不显示这个库

删除数据库

默认删除当前选中的库

db.dropDatabase()

2.2集合

查看库中的所有集合

show collections;
show tables

在这里插入图片描述

创建集合

db.createCollection('集合名称',[options])

在这里插入图片描述

options可以是如下参数

字段 类型 描述
capped 布尔 (可选)如果为true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为true时,必须指定size参数。
size 数值 (可选)为固定集合指定一个最大值,即字节数。如果capped为true,也需要指定该字段。
max 数值 (可选)指定固定集合中包含文档的最大数量

注意:当集合不存在时,向集合中插入文档也会自动创建该集合

删除集合

db.集合名字.drop()

2.3文档

2.3.1插入

注意:在MongoDB中每个文档都会有一个_id作为唯一标识,_id默认会自动生成,如果手动指定将使用手动指定的值作为_id的值

单条文档

> db.集合名称.insert({
   
   ...})

多条文档

> db.集合名称.insertMany(
	[文档1, 文档二, ...],
    {
    	writeConcern: 1, //写入策略,默认为1,及要求确认写操作,0是不要求
    	ordered: true //指定是否按顺序写入,默认为true
    }
)

> db.集合名称.insert(
	[文档1, 文档2...]
)

2.3.2查询所有

> db.集合名称.find()

2.3.3删除文档(简单删除)

> db.集合名称.remove(
	<query>,
    {
    	justOne: <boolean>
    	writeConcern: <document>
    }
)

参数说明:

  • query: 可选 删除的文档的条件 (也是BSON格式)
  • justOne: 可选,如果设置为true或1,则只删除一个文档,如果不设置该参数,或使用默认值false,则删除所有匹配条件的文档
  • writeConcern: 可选,抛出异常的级别

示例

> db.集合名.remove({}) #删除所有

> db.集合名.remove({_id:12}) #根据_id删除

...

在这里插入图片描述

在这里插入图片描述

2.3.4更新

> db.集合名称.update(
	<query>,
    <update>,
    {
    	upsert: <boolean>,
    	multi: <boolean>,
    	writeConcern: <document>
    }
)

参数说明

  • query: update的查询条件,类似sql-update查询的where条件
  • update: update的对象和一些更新的操作符 (如 , , ,inc…) 等,也可以理解为sql-update查询内set后面的
  • upsert:可选,这个参数的意思是,如果不存在update的记录,是够进行插入. true为插入,默认为false,不插入
  • multi:可选mongodb默认为false,只更新找到的第一条记录,如果这个参数为true,就按照条件查出来多条记录全部更新(一般都显示的设置为true)
  • writeConcern可选,抛出异常的级别

示例

- db.集合名.update({
   
   "name":"张三"}, {name:"李四", age:13})
将集合中name=张三的所有记录更新为 {name:"李四", age:13}, 相当于先删除在更新,不保留原始数据

#加上$set保留原始数据
-db.集合名称.update({
   
   "name":"xiaohei"}, {$set:{name:"xiaobai"}}) 
将集合中第一条name=xiahei的文档,保留文档中的其他数据,只将name更新为xiaobai

-db.集合名称.update({
   
   "name":"小黑"}, {$set:{name:"xiaoming"}}, {multi:true})
保留原始文档进行更新,更新所有符合条件的数据

-db.集合名称.update({name:"小黑"}, {$set:{name:"小明"}}, {multi:true, upsert:true})
保留原始数据进行更新,更新符合条件的所有数据,没有条件符合时插入数据

3.文档查询详解

MongoDB查询文档使用find()方法,find()方法以非结构化的方式来显示所有文档

语法

> db.集合名称.find(query, projection)
  • query: 可选,使用查询操作符指定查询条件
  • projection:可选,使用投影操作符返回指定的键(相当于sql-select语句只查询指定的列),查询时返回文档中所有的键值,只需要省略该参数即可.

如果需要以易读的方式来读取数据,可以使用pretty()方法,语法格式如下

> db.集合名称.find().pretty()

注意:pretty()方法以格式化的方式来显示所有文档

3.1范围查询

对比语法
在这里插入图片描述

3.2AND查询

  • MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。
  • AND查询,一个字段出现多次,那么只以字段最后一次为主
> db.集合名称.find({key1:value1, key2:value2}).pretty()

类似于where语句 where key1 = value1 and key2 = value2

3.3OR查询

MongoDB OR条件语句使用了关键字 $or,语法格式如下

> db.集合名称.find(
	{
    	$or:[
            {key1:value1}, {key2:value2}
        ]
    }
).pretty()

3.4AND和OR联合使用

以下实例演示了 AND 和 OR 联合使用,类似常规 SQL 语句为: ‘where likes>50 AND (by = ‘A’ OR title = ‘B’)’

> db.col.find({
   
   "likes": {$gt:50}, $or: [{
   
   "by": "A"},{
   
   "title": "B"}]}).pretty()

3.5数组查询

-- 准确查询,即数组中的值必须完全等于查询条件才匹配
> db.集合名称.find({likes:[A, B]})

-- 包含查询,即只要数组包含某个值即匹配,跟上面的不同就是不加[]
> db.集合名称.find({likes:A})

-- $size 按照数组长度查询
> db.集合名称.find({likes:{$size:3}})

3.6模糊查询

MongoDB的模糊查询依靠的是正则表达式

> db.集合名称.find({name:/xxx/(一段正则表达式)})

3.7排序

-- 按照A升序排序,A相同按照B升序排序
> db.集合名称.find().sort({A:1, B:1})

-- 1升序,-1降序

3.8分页

-- 跳过前start条数据,展示rows条数据
> db.集合名称.find().skip(start).limit(rows)

3.9计数

> db.集合名称.count() -- 查询总记录数
> db.集合名称.find().count -- 查询符合条件的总记录数

3.10去重

> db.集合名称.distinct('字段')

3.11返回指定字段(projection)

> db.集合名称.find({条件}, {name:1, age:1})
-- 1表示保留字段 0表示舍弃字段 注意:1和0不能同时使用

4.$type操作符

$type按照数据类型进行查询

注意:默认mongoDB中的数字都是Double类型

类型表

在这里插入图片描述

示例

如果想获取 A集合中 title 为 String类型 的数据,你可以使用以下命令:

db.A.find({
   
   "title" : {$type : 2}})
或
db.A.find({
   
   "title" : {$type : 'string'}})

猜你喜欢

转载自blog.csdn.net/qq_46312987/article/details/125130627