当前位置: 首页 > 工具软件 > List Template > 使用案例 >

MongoTemplate基本使用

井洲
2023-12-01

MongoTemplate基本使用

一、普通查询操作

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官网地址

 类似资料: