MongoDB基本增删改查操作
使用java操作MongoDB篇:https://blog.csdn.net/qq_28524127/article/details/90137421
学习裙:244284555,暗号:MongoDB
1选择或创建数据库
使用use 数据库名称即可选择数据库,如果该数据库不存在会自动创建
2插入文档
文档相当于关系数据库中的记录
首先我们定义一个文档变量,格式为变量名称={}; 例如:
接下来就是将这个变量存入MongoDB
格式为:
|
db.集合名称.save(变量); |
这里的集合就相当于关系数据库中的表。例如:
这样就在student集合中存入文档。如果这个student集合不存在,就会自动创建。
当然,你也可以不用定义变量,直接把变量值放入save方法中也是可以地。
为了方便后期测试,我们再多加点数据
|
db.student.save({name:"沙和尚",sex:"男",age:25,address:"流沙河路11号"}); db.student.save({name:"唐僧",sex:"男",age:35,address:"东土大唐"}); db.student.save({name:"白骨精",sex:"女",age:18,address:"白骨洞"}); db.student.save({name:"白龙马",sex:"男",age:20,address:"西海"}); db.student.save({name:"哪吒",sex:"男",age:15,address:"莲花湾小区"}); |
3查询集合
我们要查询某集合的所有文档,使用find()方法。语法格式为:
|
db.集合名称.find(); |
例如,我们要查询student集合中的所有文档:
这里你会发现每条文档会有一个叫_id的字段,这个相当于我们原来关系数据库中表的主键,当你在插入文档记录时没有指定该字段,MongDB会自动创建,其类型是ObjectID类型。
如果我们在插入文档记录时指定该字段也可以,其类型可以使ObjectID类型,也可以是MongoDB支持的任意类型. 例如:
我们再次查询
如果我想按一定条件来查询,比如我想查询性别为“女”的记录,怎么办?很简单!
只要在find()中添加参数即可,参数也是json格式,如下:
为了避免游标可能带来的开销,MongoDB还提供了一个叫findOne()的方法,用来返回结果集的第一条记录。
性别为男的有很多条,这里只返回了第一条记录。
当我们需要返回查询结果的前几条记录时,可以使用limit方法,例如:
4修改文档
我们要想修改记录,可以使用update方法 .
例如:我向将姓名为孙悟空的学员文档中的age字段值改为31,执行下列语句,看会发生什么?
再次查询:
哦,悲剧了~~ 原来的孙悟空的文档只剩下_id 和age两个字段了。
那如何保留其它字段值呢?
我们需要使用MongoDB提供的修改器$set 来实现,请看下列代码。
再次查询,会发现“猪八戒”文档中原有的其它字段还保留下来,而更新age字段也成功了。
5删除文档
删除文档使用remove()方法,格式为:
|
db.集合名称.remove( 条件 ); |
请慎用remove({}), 它会一条不剩地把你的集合所有文档删的干干净净。
我们现在演示一下,删除name为“哪吒”的记录:
再次查询,会发现哪吒的文档不见了。
4.高级查询
4.1模糊查询
MongoDB的模糊查询是通过正则表达式的方式实现的。格式为:
/模糊查询字符串/
例如,我要查询student集合中address字段中含有“洞”的所有文档,代码如下:
如果要查询name字段中以“白”开头的,代码如下:
4.2 Null值处理
如果我们想找出集合中某字段值为空的文档,如何查询呢?其实和我们之前的条件查询是一样的,条件值写为null就可以了。
我们现在集合中的文档都是没有空值的,为了方便测试,现在我们将数据做些修改:
将“唐僧”的address改为空
再次查询:
我们会发现不仅会显示“唐僧”这条文档,之前因为修改导致address字段丢失的那条记录也出现了。也就是说,这种查询会查询出该字段为null的以及不存在该字段的文档记录。
4.3大于小于
<, <=, >, >= 这个操作符也是很常用的,格式如下
db.collection.find({ "field" : { $gt: value } } ); // 大于: field > value
db.collection.find({ "field" : { $lt: value } } ); // 小于: field < value
db.collection.find({ "field" : { $gte: value } } ); // 大于等于: field >= value
db.collection.find({ "field" : { $lte: value } } ); // 小于等于: field <= value
示例:查询年龄大于等于20岁的学员记录
4.4不等于
不等于使用$ne操作符。
示例:查询sex字段不为“男”的文档
4.5判断字段是否存在
判断字段是否存在使用$exists操作符。
示例:查询所有含有address字符的文档。
示例:查询所有不含有address字符的文档。
4.6包含与不包含
包含使用$in操作符。
示例:查询student集合中age字段包含20,25,30的文档
示例:查询student集合中age字段不包含20,25,30的文档
4.7统计记录条数
统计记录条件使用count()方法。
示例:查询student集合的文档条数。
示例:查询student集合中age字段小于等于20的文档条数。
4.8 条件连接--并且
我们如果需要查询同时满足两个以上条件,需要使用$and操作符将条件进行关联。(相当于SQL的and)
格式为:$and:[ { },{ },{ } ]
示例:查询student集合中age大于等于20 并且age小于30的文档
4.9 条件连接--或者
如果两个以上条件之间是或者的关系,我们使用$or操作符进行关联,与前面$and的使用方式相同
格式为:$or:[ { },{ },{ } ]
示例:查询student集合中sex为女,或者年龄小于20的文档记录