MongoTemplate常用类
Query
//查询类
Query query = new Query(Criteria criteria)
Criteria
//常用方法
//正常查询
Criteria.where("列名").is(具体数据)
//查询同时包含values中的数据
Criteria.where("列名").all(具体数据)
//and的使用方法
Criteria.where("列名").is(具体数据)
.and("列名").is(具体数据)
//查询包含values中的数据
Criteria.where("列名").in(具体数据)
//模糊查询
Criteria.where("列名").regex("正则表达式")
//同一个字段的多个约束,注意andOperator中是一个列
where("列名").is(具体数据)
.andOperator(
Criteria.where("列名1").lt(具体数据),
Criteria.where("列名1").gte(具体数据)))
//单独使用<,>
Criteria.where("列名").gte(具体数据)
//查询某个字段不存在的数据
Criteria.where("列名").not()
//查询字段不为空的数据
Criteria.where("列名").ne("").ne(null)
//使用or/and
criteria.or/andOperator(Criteria.where("列名1").is(具体数据),Criteria.where("列名2").is(具体数据))
Update
//把"key1"对应的值设置为"value1",如果数据中不存在"key1",则会新增加一条信息key1:value1
update.set("key1", "value1")
//inc累加计算,即sum在原来基础上加上100,相当于sum=sum+100
update.inc("sum", 100)
//乘法计算,即sum在原来基础上乘以100,相当于sum=sum*100
update.multiply("sum", 100)
//rename用于修改键值, 即把"key2":"value2"修改为"k2":"value2"
update.rename("key2", "k2")
//删除键为"key3"的信息,即从文档中移除该键
update.unset("key3")
//删除array数组中的"a1"。 例如"array":["a1","a2","a3"],删除"a1"后的结果 "array":["a2","a3"]
update.pull("array", "a1")
//可一次性删除数组内多个值
update.pullAll("array", Object[] values)
//向array数组里添加"a3"(不会检查数组中元素是否重复), 数组"array"不存在则会新建该数组。修改后结果"array":["a2","a3","a3"]
update.push("array","a3")
//可一次性向数组内添加多个值
update.pushAll("array", Object[] values)
//向array数组里添加"a3"(会检查数组中元素是否重复), 数组"array"不存在则会新建该数组。修改后结果"array":["a2","a3"]
update.addToSet("array","a3")
//从"array"数组 开头/结尾(Update.Position.FIRST/Update.Position.LAST) 移除一个元素
update.pop("array",Update.Position.FIRST)
//更新符合query条件的第一条数据
template.updateFirst(query, update, collectionName);
//更新符合query条件的所有数据
template.updateMulti(query, update, collectionName);
//更新符合条件时如果不存在则会新增加一条数据,相当于执行了insert()方法
template. upsert(query, update, collectionName);
MongoTemplate基本CRUD
新增
//新增一条
mongoTemplate.save(要存储在集合中的对象,集合名);
//批量新增
mongoTemplate.insert(要存储在集合中的对象列表, 集合名)
查询
//查询多个
mongoTemplate.find(Query查询类对象, 返回值(集合), 集合名)
//查询一个
mongoTemplate.findOne(Query查询类对象, 返回值(对象),集合名)
修改
//修改查询到的第一个
mongoTemplate.updateFirst(Query查询类对象(需要修改哪个对象), Update类对象(需要更新的对象信息), 要操作的实体类, 集合名)
//修改查询到的所有
mongoTemplate.updateMulti(Query查询类对象(需要修改哪个对象), Update类对象(需要更新的对象信息), 要操作的实体类, 集合名)
删除
//删除全部(删除一般都不用)
mongoTemplate.remove(Query查询类对象, 集合名)
关联查询
LookupOperation lookupToLots = LookupOperation.newLookup().
from("eCostRecord").//关联表名 lots
localField("lsumpDocNumber").//关联字段
foreignField("lsumpDocNumber").//主表关联字段对应的次表字段
as("groups");//查询结果集合名
//主表
Criteria ordercri = Criteria.where("eccDocNo").ne(null).ne("");
AggregationOperation match = Aggregation.match(ordercri);
//次表
Criteria ordercri1 = Criteria.where("group").is(true);
AggregationOperation match1 = Aggregation.match(ordercri);
//UnwindOperation unwind = Aggregation.unwind("groups");
Aggregation aggregation = Aggregation.newAggregation(match, lookupToLots,match1//, unwind);
return mongoTemplate.aggregate(aggregation, "reClassGroup", ReClassGroup.class).getMappedResults();
从表条件一定要放在lookupToLots 后面才能生效,这是因为as(“groups”)语句类似于sql中的取别名,而从表中使用啦别名,声明要在使用的前面,至于很多博主说必须写“UnwindOperation unwind = Aggregation.unwind(“groups”)”从表条件才能生效,个人验证无效
子查询
//一个简单的例子
Query query1 = new Query(Criteria.where("_id").is(1));
User users = mongoTemplate.findOne(query1, User.class, "users");
Object address = null;
if(users != null){
Query query = new Query(Criteria.where("_id").is(users.id));
address= mongoTemplate.findOne(query, Object.class, "addresses");
}