阿丹:
本文章将描述以及研究mongodb在客户端的基础应用以及在spring-boot中整合使用mongodb来完成基本的数据增删改查。
MongoDB CRUD操作 - MongoDB-CN-Manual
MongoDB如何创建数据库和集合 | MongoDB中文社区
MongoDB CRUD操作 - MongoDB-CN-Manual
数据库学习的第一步一定是创建数据库和集合。数据库用于存储所有集合,而集合用来存储所有文档。这些文档将一次包含相关的“字段名”和“字段”的值。
同时我们要知道一个事情就是文档中也是可以存在文档的。类比与java中的实体类就方便理解很多。一个类中的属性也可以是其他的实体类。
下面是一个文档是示例:
{
“Employeeid”:1,
“EmployeeName”:“Smith”
}
冒号前面是field names
后面就是 field values
使用use命令来创建一个新的数据库:
use ExampleDB
这个代码中的ExampleDB就是新建的数据库文件。
这段mongodb的use代码可以类比为mysql中的:
IF NOT EXISTS
(SELECT * FROM sys.databases WHERE name = 'ExampleDB')
CREATE DATABASE ExampleDB;
这个示例的sql在mysql中执行的时候是一个效果。
1、使用 use 命令来创建mongodb中的数据库,如果数据库不存在,将创建一个新的数据库。
2、同样如果数据库存在则使用这个数据库。
可以看到执行成功。在use语句执行成功之后mongodb将自动切换到创建的数据库。
创建集合的最简单方法是一条记录(不过是使用字段名称和值组成的文档)插入到集合中。如果该集合不存在,则会创建一个新的集合。
use ExampleDB
db.ExampleDB.insert
(
{
"员工编号":1,
"员工姓名":"阿丹"
}
)
解释一下语法:
db:是一个对象,代表一个数据库的连接。在使用这个语言之前,需要建立数据库的连接。以便在代码中访问数据库。
ExampleDB:进行操作的集合名称,如果没有这个集合就会新建这个集合。
{
"员工编号":1,
"员工姓名":"阿丹"
}
上面就是一个文档
“员工编号”:就是一个field names
“员工编号的值”:就是value
注意:
如果在mongodb中没有这个库的数据使用这样的插入语句就会新建一个这样的库
使用上述语句来进行插入的时候是不完善的。因为这会导致我们的这个新增的文档添加到一个与库的名字一样的集合中去。一定要注意。
尝试使用数组的形式一次性的多次传入多个文档。
完成步骤思想:
1、创建一个名字叫Example数组javascript变量来保存文档数组
2、将具有字段名称的值和所需要的文档添加到变量中
3、使用insert命令将文档数组插入到集合中
#定义数组
var Example = [
{
"员工编号":2,
"员工姓名":"帅丹"
},
{
"员工编号":3,
"员工姓名":"大力丹"
},
{
"员工编号":4,
"员工姓名":"快乐丹"
}
]
#将定义的数据添加到ExampleDB集合中
db.ExampleDB.insert(Example)
这就是在MongoDB中完成了批量添加。
现在可以看到已经成功的加入了三条数据。也就是三个文档。
在以前使用的文档形式存储的格式中最常使用的就是json的形式。更是因为如果我们拿到了json形式的字符串的话。我们可以很轻松的将这个json字符串转换成我们的实体类。
json格式的全称为JavaScript Ojbect Notation的格式(对我们敲java的人很友好),是一种规律的存储信息,并且便于阅读的格式。
那么下面我们就使用语句来完成打印json的示例:
db.查询使用的集合.find().forEach(printjson)
执行尝试一下:
代码方法以及参数解释:
db.ExampleDB.find()
: 这个语句使用find()
方法来查询ExampleDB数据库中的所有文档。find()
方法返回一个游标(cursor)对象,该对象包含了所有符合查询条件的文档。forEach
: 这个方法用于遍历游标中的每个文档,并对每个文档执行指定的操作。printjson
: 这个函数用于将文档以JSON格式打印到控制台上其中的find()如果括号中什么都不写的话就默认是查找所有的。
通过解析刚才MongoDB给我们的返回值中我们可以看到本来在业务逻辑中员工编号是成为使用主键id。但是发现mongodb自己生成了一个不规则的字符串字段。“_id”。现在我们需要将这个“_id”给设置成我们的主键id.
在MongoDB中,_id字段是集合的主键,以便可以在集合中唯一地标识每个文档。_id字段包含唯一的ObjectID值。
默认情况下,在集合中插入文档时,如果您没有在字段名称中添加带有_id的字段名称,则MongoDB将自动添加一个Object id字段
所以原理是只要我们在添加的时候有这个字段名叫做“_id”就可以完成主键的替换。不在使用系统自带的生成的id.
我们来进行尝试:
使用代码:
db.ExampleDB.insert
(
{
"_id":1,
"员工姓名":"代码阿丹"
}
)
我在这个文档中规定使用了字段名:“_id”
显示添加成功,使用上一小节的查询输出来查看一下,代码阿丹的id是否为1.替换掉系统自己生成的id。
可以看到完成了主键id的规则替换。
说明我们可以使用给字段名“_id”赋值来作为集合的主键。
通过条件查询的语句的执行我们就可以从mongodb中拿到更精准的的数据。以及组合等数据。从后台拿取的数据越精确对于后面的开发就会省力很多。
那么MongoDB就提供了一个名为db.collection.find()的函数,该函数用于从MongoDB数据库中检索文档。
基本查询操作包括一些简单的操作,比如获取MongoDB集合中的所有文档。
因为我们之前的操作中的我们新建了一个ExampleDB集合。所以我们就可以执行下面的命令。
db.ExampleDB.find({})
指令解析:
db.ExampleDB.find({})
这个 MongoDB 语句的作用是在 ExampleDB 数据库中查找所有文档。
find()
方法是 MongoDB 中用于查询文档的方法,它接受一个查询条件作为参数,并返回符合条件的所有文档。在这个例子中,查询条件是一个空对象 {}
,表示没有限制条件,因此会将数据库中的所有文档都返回。
{}
这个符号表示一个空的查询条件,也可以使用其他条件来限制查询的结果。例如,你可以使用类似于 { "员工姓名": "阿丹" }
的条件来查询员工姓名为 "阿丹" 的文档,或者使用类似于 { "员工编号": { $gt: 100 } }
的条件来查询员工编号大于 100 的文档。
因此,db.ExampleDB.find({})
这个语句的作用是返回 ExampleDB 数据库中的所有文档,而 {}
表示没有限制条件,会返回所有文档。
比如我想要查询员工编号为1的员工。下面是一个例子:
#查询员工编号为1的员工
db.ExampleDB.find({"员工编号":1}).forEach(printjson)
这个语句中使用了{},中括号的方式,在中括号中使用了json的形式来规定规则,来查询指定的编号员工。
使用大于搜索条件,它实际上搜索那些大于指定值的文档。
比如我想查询员工标号大于2的文档,下面是例子:
#查询员工编号大于2的员工
db.ExampleDB.find({"员工编号":{$gt : 2}}).forEach(printjson)
解释说明:
$gt为查询选择运算符,意思是使用大于号表达式。
给大家提供一下有关的判断表达式;
$lt
:小于$eq
:等于$ne
:不等于$gt
:大于等于$lt
:小于等于当使用db.collection.find()函数在集合中搜索文档时,结果将返回指向文档集合的指针,该指针称为游标。类似于指针。
默认情况下,返回查询结果时,游标将自动进行迭代。当然可以一个接一个明确展示游标中返回的结果目录。
比如在集合中有三个文档,光标初始化指向第一个文档,然后遍历该集合的所有文档。
示例代码:
#演示游标
var myExampleDB = db.ExampleDB.find({});
while(myExampleDB.hasNext()){
print(tojson(myExampleDB.next()))
}
代码解释:
这段代码的作用是在 ExampleDB 数据库中查找所有文档,并将每个文档以 JSON 格式打印到控制台上。
首先,通过 db.ExampleDB.find({})
方法查询 ExampleDB 数据库中的所有文档,返回一个游标对象 myExampleDB
。
然后,使用 while
循环遍历游标中的每个文档,直到游标中的文档遍历完毕。在循环体中,使用 tojson()
函数将每个文档转换为 JSON 格式,并使用 print()
函数将 JSON 打印到控制台上。
总的来说,这段代码的功能是查询 ExampleDB 数据库中的所有文档,并将每个文档以 JSON 格式打印到控制台上
这个修饰符用于限制查询结果集中返回的文档数。下面就是例子。
#limit结果
db.ExampleDB.find().limit(2).forEach(printjson)
这个语法和用法和mysql中的类似但不一样。这个函数中参数是几就查出几个文档。
在MongoDB中是支持根据集合中的任何键升序或者降序来制定要返回的文档的顺序的。
示例代码:
#根据员工编号倒序排序
db.ExampleDB.find().sort({ 员工编号: -1}).forEach(printjson)
这里清楚地显示了按Employeeid降序返回的文档。
值为1则按照升序。
聚合的概念是对查询中返回的结果进行计算。例如,假设我们想知道根据触发的查询集合中文档的数量是多少,那么MongoDB提供了count()函数。
让我们可以查询文档中数量。
让我们看一个例子。
#查看集合中文档数量
db.ExampleDB.count()
这里是一些count()函数的用法
在 MongoDB 中,count()
函数用于计算集合中满足指定条件的文档数量。count()
函数接受一个查询条件作为参数,并返回满足条件的文档数量。
以下是一些使用 count()
函数的示例:
计算集合中所有文档的数量:
db.myCollection.count({})
计算集合中指定条件的文档数量:
db.myCollection.count({ "key": "value" })
使用 match
管道操作符计算集合中匹配条件的文档数量:
db.myCollection.aggregate([
{ $match: { "key": "value" } },
{ $count: "count" }
])
使用 match
和 group
管道操作符计算分组后的文档数量:
db.myCollection.aggregate([
{ $match: { "key": "value" } },
{ $group: { _id: "groupKey", count: { $sum: 1 } } }
])
以上示例中,count()
函数分别用于计算集合中所有文档数量、计算满足特定条件的文档数量、使用 match
和 group
管道操作符计算分组后的文档数量。
在MongoDB中,db.collection.remove()方法用于从集合中删除文档。所有文档都可以从集合中删除,也可以仅从符合特定条件的文档中删除。
如果仅发出remove命令,则所有文档将从集合中删除。
下面的代码示例演示如何从集合中删除特定文档。
#删除员工标号为4的文档
db.ExampleDB.remove({员工编号:4})
可以看到对于删除对应字段名和值的语法。
MongoDB提供了update()命令来更新集合的文档。仅仅更新要更新的文档,可以将条件添加到更新语句,以便更新选定的文档。
该命令中的基本参数是需要更新文档的条件,其次是需要执行的修改。
操作思路:
#修改员工标号为1的名字
db.ExampleDB.update(
{"员工编号":1},
{
$set:{
"员工姓名":"库库帅阿丹"
}
}
)
看到表明,一条记录符合条件,一条记录修改了相关字段!!!
下面是一些update的用法
这个代码是使用 MongoDB 的 update()
函数来更新名为 "员工编号" 的字段值为 1 的文档中的 "员工姓名" 字段的值为 "库库帅阿丹"。
具体来说,update()
函数接受两个参数:
{"员工编号":1}
,表示要更新 "员工编号" 字段值为 1 的文档。{ $set: { "员工姓名": "库库帅阿丹" } }
,表示要将 "员工姓名" 字段的值更新为 "库库帅阿丹"。其中,更新操作可以使用以下几个操作符:
$set
: 设置指定字段的值。$unset
: 删除指定字段。$rename
: 重命名指定字段。$inc
: 增加指定字段的值。除了上面的示例,update()
函数还可以使用其他参数来控制更新行为,比如 multi
参数(指定是否更新多个文档)和 upsert
参数(指定是否插入新文档)。
总之,update()
函数是 MongoDB 中用于更新文档的函数,可以方便地对数据库中的文档进行修改操作。