鱼C论坛

 找回密码
 立即注册

2.1mongodb 数据操作

已有 288 次阅读2017-9-17 21:17 |个人分类:MongoDB学习笔记

只要是数据库那么就绝对离不开最为核心的功能:(CRUD)其外还有数据操作的日志以及数据的索引。就这些内容,这是所有数据库的核心内容。所以在MongoDB里面对于数据的操作也是有支持的。但是需要提醒的是除了增加之外,其他的都很麻烦。
2.1.1 数据增加
使用"db.集合.insert()"可以实现数据的增加操作。
范例:增加一个简单数据
范例:增加数组
如果想保存多个数据,那么就是用数组。
范例:保存10000个数据呢?
如果数据保存很多的情况下,列表时不会全部列出,他只会列出部分的数据内容。对比起传统的关系型数据库这就先进了许多。
2.1.2数据查询
在任何的数据库之中,数据的查询操作都是最麻烦的,而在MongoDB数据库中,对于数据的查询十分到位,比如有关系运算,
逻辑运算,数组运算,正则运算等等。
首先对于数据的查询操作核心的语法:'db.集合名称.find({查询条件}[,{设置显示的字段}])'。
范例:最简单的用法就是直接使用find()函数完成查询
范例:希望查询出url为url为'www.mldn.cn'的数据
       
发现在进行数据查询的时候也是按照JSON的形式设置的相等关系,他的整个开发之中都不可能离开JSON数据。
设置设置的显示字段严格来讲就称为数据的投影操作,如果不需要显示的字段设置'0',而需要显示的字段设置'1'.
范例:不想显示'_id'
大部分情况下,这种投影的意义不大。同时对于数据的查询也可以使用'pretty()'函数进行优雅的显示。
范例:优雅显示
数据列多的时候一定可以看出华丽的显示格式
范例:查询单个数据
利用以上的查询可以实现格式化的输出效果,前提:列的内容必须多。

2.1.3.1关系查询
在MongoDb里面支持的关系查询操作:大于($gt),小于($lt),大于等于($gte),小于等于($lte),不等于($ne),等于(key:velue),但是要想让这些操作可以正常使用,那么需要准备出一个数据集合
范例:定义一个学生信息集合

范例:查询姓名是张三的学生信息

范例:查询性别是男的学生信息

范例:查询年龄大于十九的学生

范例:查询成绩大于等于六十分的学生

范例:查询姓名不是王五的信息

此时与之前最大的区别就在于,在一个JSON结构里需要定义其他的JSON构,并且这种结构在日后用程序进行操作的时候依然如此。

2.1.3.2逻辑运算

逻辑运算主要就是三种类型:与($and),或($or),非($not $nor)

范例:查询年龄在19-20岁的学生信息

在进行逻辑运算的时候"and"的连接是最容易的,因为只需要利用","分割若干个条件就可以了。

范例:查询年龄不是19 岁到20岁的学生

里边仍有十九,原因在于没有注意否定的目标,木标并不是十九。而是一个集合。

这次否定的目标才对

范例:查询年龄大于19岁,或分数高于90分的学生信息

范例:求反

在这几个逻辑运算中与的连接最简单。而或的连接需要为数据设置数组的锅炉条件

2.1.3.3求模

模的运算使用"$mod"来完成,语法{"$mod":[数字,余数]}。

范例:求模

利用求模计算可以编写一些数学的计算公式

2.1.3.4范围查询

只要是数据库,就存在有"$in"(在范围之中),"$nin"(不在范围之中)。

范例:查询姓名是“张三”,“李四”,“王五”的信息

范例:不在范围内

在实际的工作中,范围的操作很重要。

2.1.3.5数组查询

首先,在MongoDB里面是支持数组保存的,一旦支持了数组的保存,就需要真对于数组的数据进行匹配

范例:保存一部分数组内容

此时的数据包含有数组内容,而后需要针对于数组数据进行判断,可以使用几个运算符:$all $size $slice $elemMatch

范例:查询同时参加数学和语文课程的学生

现在两个数组内容都需要保存,所以使用"{"$all",[内容1,内容2...]}"

虽然"$all"计算可以用于数组上,但是也可以用于一个数据的匹配上。

范例:查询地址为"海淀区"的信息

db.students.find({"address":{"$all":["海淀区"]}}).pretty()

既然在集合里面现在报存的是数组信息,那么数组就可以利用索引操作,使用"key.index"的方式来定义索引

范例:查询数组中第二个内容(index=1,索引下标从0开始)为数学的信息

范例:要求查询出只参加两门课程的学生

使用"$size"来进行数量的控制

发现在进行数据查询的时候只要是内容符合条件,数组的内容就全显示出来了,希望控制数组返回的数量,那么就可以使用"$slice"操作

范例:返回年龄为19岁的所有学生的信息,但只显示两门课程

db.students.find({"age":19},{"course":{"$slice":2}}).pretty()

现在只取得了前两门的信息,那么也可以设置负数表示取出后两门信息

db.students.find({"age":19},{"course":{"$slice":-2}}).pretty()

或者只是取出中间部分的信息

db.students.find({"age":19},{"course":{"$slice":[1,2]}}).pretty()

第一个数据表示跳过的数据量,第二个数据表示返回的数量


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 12:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部