利用SpringBoot中的MongoTemplate实现MongoDB数据库的set, push和pop操作

3 篇文章 0 订阅
1 篇文章 0 订阅
由于在项目中遇到了需要在后台服务器上通过java代码直接操作MongoDB数据库,故写入此博客以作复习备忘之用。

总结:

(2020.05.07更新)想在java中直接实现对MongoDB数据库的push,set,pop操作,需要用到MongoTemplate。这里的是利用Spring中自动注入的方式生成实例,你也可以直接new一个对象。重点在于操作语句的写法。

@Autowired
MongoTemplate m;
//set
m.updateMulti(
	new Query(Criteria.where("_id").is("你要找的id")),
	new Update().set("你要找的属性", "属性要修改的内容"),
	java中对应的类.class,
	"mongo中对应的数据库表名称"
);

//push
m.updateMulti(
	new Query(Criteria.where("_id").is("你要找的id")),
	new Update().push("对应的属性",要插入的内容),
	java中对应的类.class,
	"对应的表名称"
);
//pop
m.updateMulti(
	new Query(Criteria.where("_id").is("你要找的id")),
	new Update().pop("对应的属性,比如它包含一个数组",Update.Position.FIRST),
	java中对应的类.class,
	"对应的表名称"
);

对于pop,Update.Position.FIRST对应着删除的是头元素,把FIRST改成LAST就是删除尾部元素。

如果觉得不够形象,就看下面的例子

1. 先看在MongoDB数据库里的操作方式:

1.1 直接来操作语句的语法:
db.对应的表名称.update(
     {"_id":“你要修改元素的id”} ,
     {$操作符:{“要修改的属性名”:具体如何修改的地方}}
   );
1.2 直接举例说明:
1.2.1 先看set操作,他可以用来修改,比如我这里把sheet_name这个属性对应的名称修改了:
db.sheets.update(
			{"_id":"bombom"},
			{$set:{"sheet_name":"csdn666"}}
		);
1.2.2 再看push操作,通过这个操作可以往对应的数组元素中push新的值,这个也是自己在项目中用的比较多的操作:
db.sheets.update(
				{"_id":"bombom"},
				{$push:{"score":[1,2,3,4,5]}}
			);
我这里是个二维数组,现在push了一个新的数组进入,当然我也可以只push一个数而不是数组,只需要将刚才update操作中的数组改成一个数即可:
db.sheets.update(
				{"_id":"bombom"},
				{$push:{"score":12}}
			);
1.2.3 pop操作方式如下:
db.sheets.update(
				{"_id":"bombom"},
				{$pop:{"score":-1}}
			);
注意,这里的-1表示删掉数组的头部的元素,1表示删除尾部的元素。

2. 接下来是在Spring Boot项目中利用MongoTemplate的操作方式。

2.1 首先你要在application.properties文件中建立好数据库链接,这里不过多讲述。然后你要创建一个对象,并且通过注解@的方式和你对应的数据库的Collection名称绑定:
@Document(collection = "sheets") //这里和刚才的表一样,都叫sheets
public class csdn {

    @Id
    private String id;
    private String sheet_name;
    private int[][] score;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getSheet_name() {
        return sheet_name;
    }

    public void setSheet_name(String sheet_name) {
        this.sheet_name = sheet_name;
    }

    public int[][] getScore() {
        return score;
    }

    public void setScore(int[][] score) {
        this.score = score;
    }
}
2.2 创建好class之后需要利用MongoTemplate。先看通用的操作语法为:
mongoTempalte.updateMulti(
		new Query(Criteria.where("_id").is("对应的id")),
		new Update().操作符("属性名":操作方式),
		对应的java对象.class,
		"对应的数据库表的名称"
		);
2.3 然后依旧还是看对应的例子 :

(2020.05.07更新)这里的例子都是在Spring Boot环境下调用的,实际上可以忽略掉除了mongotemplate之外的代码。

2.3.1 首先依然是set操作:
@RestController
@RequestMapping("/action")
public class Action {

    @Autowired
    MongoTemplate mongoTemplate;

    @GetMapping("/test")
    public void test(){

        mongoTemplate.updateMulti(
        	new Query(Criteria.where("_id").is("bombom")),
        	new Update().set("sheet_name","csdn888"), 
        	csdn.class, 
        	"sheets"
        	);


    }
}
2.3.2同理,push也很简单:
@RestController
@RequestMapping("/action")
public class Action {

    @Autowired
    MongoTemplate mongoTemplate;

    @GetMapping("/test")
    public void test(){

        int[] in={9,8,7};
        mongoTemplate.updateMulti(
        	new Query(Criteria.where("_id").is("bombom")),
        	new Update().push("score",in), 
        	csdn.class, 
        	"sheets"
        	);


    }
}
2.3.3 稍微复杂一点的是pop操作:因为pop要利用到Position的接口,而不能直接输入数字,代码如下:
@RestController
@RequestMapping("/action")
public class Action {

    @Autowired
    MongoTemplate mongoTemplate;

    @GetMapping("/test")
    public void test(){


        mongoTemplate.updateMulti(
                new Query(Criteria.where("_id").is("bombom")),
                new Update().pop("score", Update.Position.FIRST),
                csdn.class,
                "sheets"
        );


    }
FIRST就表示数组的头元素,对应的,LAST就是尾部元素。
之前在网上搜了很久,没有找到对应的博客详细说明这几个操作,都是比较零零散散,特别是关于MongoTemplate的pop操作基本没有相应的文章,所以自己总结一下,方便自己的同时也方便大家,有问题欢迎讨论交流。
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值