1.is查询
Query query = new Query();
// where...is... 相当于 where ? = ?
query.addCriteria(Criteria.where("数据库字段名").is("你的参数"));
// findOne 返回的是一个对象 Class代表你的表对应的映射类
mongoTemplate.findOne(query, Class.class);
// find 返回的是数组
mongoTemplate.find(query, Class.class);
2.in查询
ArrayList<String> list = new ArrayList<>();
// list代表你的数据
Query query = Query.query(Criteria.where("数据库字段").in(list));
mongoTemplate.find(query, Class.class);
// 如果想要查询指定的数据是否在数据库的数组中,可以用以下方法
Query query = Query.query(Criteria.where("数据库字段(数组)").is("你的数组"));
例如你的数据是1
数据库中的数据为
[1,2,3]
就可以用上面的第二种方法
3.字符模糊查询
Query query = Query.query(Criteria.where("name").regex("小"));
4.指定字段不返回
query.fields().exclude("field");
5.数组中添加或删除一条数据
Query query = Query.query(Criteria.where("_id").is("id"));
Update update = new Update();
// push方法可以在数组中添加一条数据
// pull方法可以在数组中删除一条数据
// update.pull()
update.push("字段名称", "data");
mongoTemplate.updateFirst(query, update, Class.class);
6.批量添加
ArrayList<Class> list = new ArrayList<>();
mongoTemplate.insert(list, Class.class);
7.数组查询
数组格式:
{
name:"小明",
age:13,
friends:[
{
name:"小王",
age:12
},
{
name:"小李",
age:18
}
]
}
当要查询朋友中姓名为小王时
Query query = new Query();
query.addCriteria(Criteria.where("friends.$.name").is("小王"));
mongoTemplate.find(query, User.class);
同样更新时也是一样,但是注意,更新时查询条件需要添加
query.addCriteria(Criteria.where("friends").elemMatch(Criteria.where("name").is("小王"));
Update update = Update.update("friends.$.friends", "小赵");
8.数字字符串排序操作
对数据库中数字字符串排序:
加上这一行就行了 亲身体验
query.collation(Collation.of("zh").numericOrdering(true));
还有根据字符串排序时又是顺序并不是我们所想的字典序,加上下面这个也ok
query.collation(Collation.of("zh"));
9.修改对象数组中的值
{"_id" : ObjectId("63172fe71aedc200012521d2"), "title" : "33333", "receiveMember" : [ { "name" : "XXX", "xlId" : "111111111111", "send" : "1", "release" : "0" }, { "name" : "XXX", "xlId" : "22222222222", "send" : "1", "release" : "0" } ] }
示例数据如上,现在需要修改数组中其中一个对象的值,如下
Query query = Query.query(Criteria.where("_id").is(momentTaskId)); query.addCriteria(Criteria.where("receiveMember").elemMatch(Criteria.where("xlId").is("xxx"))); Update update = new Update(); update.set("receiveMember.$.send", "1"); mongoTemplate.updateFirst(query, update, MomentTask.class);
批量修改数组中的值,与上面大致相同,只是修改的时候稍微有些改动
Query query = Query.query(Criteria.where("_id").is(momentTaskId)); query.addCriteria(Criteria.where("receiveMember").elemMatch(Criteria.where("xlId").in("xxx"))); Update update = new Update(); // 注意[],代表修改多个 update.set("receiveMember.$[].send", "1"); mongoTemplate.updateMulti(query, update, MomentTask.class);
然后就完成了
->mongodb官网地址