SpringBoot整合MongoDB(2)
在用basedbobject拼接json对象时,当json特别长时,下面这个方法是一个合适的方法
String groupStr = "{\"$group\":{\"_id\":\"$name\",\"count\":{\"$sum\":1},\"avg_age\":{\"$avg\":\"$age\"},\"total_age\":{\"$sum\":\"$age\"},\"max_age\":{\"$max\":\"$age\"},\"min_age\":{\"$min\":\"$age\"}}}";
DBObject dbObject = (DBObject) JSON.parse(groupStr);1. 插入数据
1-1. 插入一条数据
User user = new User();
user.setName("woms");
user.setAge(15);
//db.user.insert({"name":"woms","age":15})
mongoTemplate.insert(user);1-2. 插入多条数据
//> db.user.insert([{"username":"jj","age":11},{"username":"jj","age":11}])
List<User> list = new ArrayList<>();
User user = new User();
user.setAge(14);
user.setName("jj");
list.add(user);
mongoTemplate.insertAll(list);2. 查询数据
db.collectionName.find({查询条件},{控制要显示的字段,可选项}) 数据查询也是使用json形式设置的相等关系 可选项中要显示的字段设置为1,不想显示的字段设置为0 对于查询而言,使用java-api的find()函数,只要知道bson写法,就能写api
2-1. 不带查询条件--查询全部
不带查询条件,查询全部数据
2-2. 不带查询条件--查询第一条
不带查询条件
2-3. 可选项,控制要查询的字段
2-4. 关系查询
大于("$gt")、小于("$lt")、大于等于("$gte")、小于等于("$lte")、不等于("$ne")、等于({"key":"value"}、"$eq")、模("$mod")
求模bson结构,db.user.find({"age":{"$mod":[20,1]}}),查询出所有年龄age除以20余数为1的数据记录,和其他的关系运算符不同,求模需要两个 数据运算,所以用数字表示
范例:查询name=woms95 and age >= 95的记录
心得:
一个json串“{}”就是一个BasicDBObject对象,查询条件可以使用json串,也可以使用BasicDBObject对象
json串中逗号相隔的key:value,使用append(key,value)拼接
语法是json语法,格式是bson格式
2-5. 逻辑查询
与($and)、或($or)、非($not 、$nor)
bson结构中,逻辑运算付的级别最高
范例:name=woms-35 or age = 99
心得
一个{}就是一个BasicDBObject,{}的嵌套就是BasicDBObject的嵌套
嵌套中如果嵌套{},还用BasicDBObject如果嵌套[]就使用list
nor是一个或(or)的求反功能
加深理解
2-6. 范围查询
在范围内("$in")、不在范围内("$nin")
范围的内容有多个,所以要用数组表示
范例:查询age范围在[1,3,5,7,9]内的所有记录数据
2-7. 数组查询
在MongoDB中支持数组保存,一旦支持了数组保存,就需要针对数组的数据进行匹配 可以使用MongoDB的BSON的几个操作符:all、size、slice、elemMathc
范例1:查询同时参加语文和数学的学生{“$all”,[内容1,内容2,…]}
范例2:控制数组显示的内容
范例3:指定索引位置元素查询
2-9. 模糊查询-正则查询
基础语法:{key:正则标记} 完整语法:{key:{“$regex":正则标记,"regex":正则标记,"$options”:"i"}}
对于options主要是设置正则的信息查询的标记:
“i” :忽略字母大小写; “m” :多行查找; “x” :空白字符除了被转义的或者在字符类中以外的完全被忽略; “s” :匹配所有的字符(圆点、”.”),包括换行内容
2-10. 排序分页
方式一
方式二
2-11. 距离索引查询
必须创建地理位置索引,而且在插入数据之前就预先创建好
db.car_info.createIndex( { "location": "2dsphere" } )索引字段使用的是geojson数据格式,格式如下,注意type的首字母是大写
范例1:计算点[115.21,40.31]半径为1英里范围内的所有点,这里1英里=1.6公里 3963.2为大约地球半径
注意: [[115.21,40.31],1/3963.2]java-json解析异常了,需要使用BasicDBObject结合数组使用
范例2:查询距离最近的点并且排序
3. 修改数据
upsert : 如果更新的数据不存在,就增加一条新的内容(true为增加,false不增加),默认false multi :表示是否只更新满足条件的第一条记录(false:只更新第一条记录,ture全部更新)默认false
3-1. 整行更新
整行更新,只跟新满足条件的第一条数据
多行同时更新(注意:多行更新不能整行覆盖,只能指定字段指定更新,这也正符合开发的规则)
跟新,不存在就插入数据
4. 删除数据
4-1. 根据条件删除
json串内的字符串可以用双引号+转义字符“\”,也可以使用单引号
4-2. 删除全部数据
5. 聚合操作
5-1. 统计个数
count({})函数内,用json去建立条件的相等关系
消除重复数据
语法如下
方式一:
方式二:
6. aggregate操作
在整个聚合框架里面。要引用每行的数据就采用“$”+ 字段名称
几个操作符可以同事使用
方法里的名称使用的是实体类的名称不是数据库字段的名称
6-1、$group
在MongoDB中会将集合依据指定的key的不同进行分组操作,并且每一个组都会产生一个处理的文档结果
{ $group: { _id: <expression>, <field1>: { <accumulator1> : <expression1> }, ... } } _id是分组条件,如果_id设置为null,就是将整个文档作为一个整体组,不分组统计
数组显示$push
数组去重$addToSet
注意,所有的分组都是无序的
范例一:
范例二:
6-2、$project
project可以用来控制列的显示规则,相当于结果集的投影功能
1、普通列({“成员”:1|true})表示要显示的内容 2、_id列({“_id”: 0|false})表示“_id”列是否显示 3、条件过滤列({“成员”:表达式})满足表达式之后的数据可以进行显示
6-3. $match
相当于where字句
6-4. $sort
1:升序 -1: 降序
6-5. 分页
$limit:负责数据的取出个数 $skip:负责数据的跨过个数
6-6. $unwind
在查询数据的时候,经常返回数组信息, 这个操作付的所用就是将数组信息转换成字符串
6-7. $geoNear
计算距离,必须要有索引的支持
6-8、$out
将查询结果输出到指定的集合里面(表的复制操作,生成一张新表)
Last updated
Was this helpful?