MongoDB MongoTemplate对嵌套对象,多层级数据,以及其他常规增删改查
数据格式本文测试用的多层级数据格式基础数据如下:{"id": "1","warehouseConfigId": "1","remarks": "备注信息","groupGoodsInfo": [{"ids":"1008601","planNumber": "计划编号0001","productId": "1","shopName": "店铺名称0
·
数据格式
本文测试用的多层级数据格式基础数据如下:
{
"id": "1",
"warehouseConfigId": "1",
"remarks": "备注信息",
"groupGoodsInfo": [
{
"ids":"1008601",
"planNumber": "计划编号0001",
"productId": "1",
"shopName": "店铺名称01",
"shopId": "1",
"fnsku": "fnsku",
"quantity": "9",
"inventoryQuantity": "10",
"remarks": "备注信息",
"singleGoodsInfo": [
{
"productId": "10010",
"shopName": "店铺名称01",
"shopId": "1",
"fnsku": "fnsku",
"singleProductQuantity": "2",
"quantity": "9",
"inventoryQuantity": "10"
},
{
"productId": "10011",
"shopName": "店铺名称02",
"shopId": "1",
"fnsku": "fnsku",
"singleProductQuantity": "2",
"quantity": "9",
"inventoryQuantity": "10"
}
]
},
{
"ids":"1008602",
"planNumber": "计划编号0001",
"productId": "1",
"shopName": "店铺名称01",
"shopId": "1",
"fnsku": "fnsku",
"quantity": "9",
"inventoryQuantity": "10",
"remarks": "备注信息",
"singleGoodsInfo": [
{
"productId": "100101",
"shopName": "店铺名称01",
"shopId": "1",
"fnsku": "fnsku",
"singleProductQuantity": "2",
"quantity": "9",
"inventoryQuantity": "10"
},
{
"productId": "100111",
"shopName": "店铺名称02",
"shopId": "1",
"fnsku": "fnsku",
"singleProductQuantity": "2",
"quantity": "9",
"inventoryQuantity": "10"
}
]
}
]
}
MongoDB存储json格式数据
/**
* MongoDB存储json格式数据
*
* json数据可以是JSONObject,也可以是JSONArray
*
* @param jsonObject
* @return
*/
@PostMapping("/mongoAddJsonData")
public Response mongoAddJsonData(@RequestBody JSONObject jsonObject){
this.mongoTemplate.insert(jsonObject, "mongo_json_test");
return Response.successResponse("新增成功");
}
存储结果:
更新json对象中的嵌套对象
/**
* 更新json对象中的嵌套对象
*
* @return
*/
@PostMapping("/mongoUpdateJson")
public Response mongoUpdateJson(){
Query query = new Query(Criteria.where("_id").is("60c1dd52c6f19836a37fddc6").and("groupGoodsInfo.ids").is("1008601"));
Update update = Update.update("groupGoodsInfo.$.planNumber", "ABCD123456").set("groupGoodsInfo.$.shopName", "我被更新了!");
mongoTemplate.updateFirst(query, update, "mongo_json_test");
return Response.successResponse("更新成功");
}
更新结果:
更新json对象中的多层嵌套对象
当数组中还有数组的时候,这个时候涉及到多层级嵌套更新,当前MongoDB不支持多个$,所以我这里采用的方法是,把超过2层的对象数据拿出来编辑好了再整个去更新。
/**
* 更新json对象中的多层嵌套对象
*
* @return
*/
@PostMapping("/mongoUpdateJson3")
public Response mongoUpdateJson3(){
JSONArray jsonArray = new JSONArray();
JSONObject jsonObject = new JSONObject();
jsonObject.put("songfayuan", "测试数据");
jsonObject.put("age", "28");
jsonObject.put("gender", "男");
jsonArray.add(jsonObject);
jsonArray.add(jsonObject);
Query query = new Query(Criteria.where("_id").is("60c1dd52c6f19836a37fddc6").and("groupGoodsInfo.ids").is("1008601"));
Update update = Update.update("groupGoodsInfo.$.singleGoodsInfo", jsonArray).set("groupGoodsInfo.$.remarks",jsonArray);
WriteResult writeResult = mongoTemplate.updateFirst(query, update, "mongo_json_test");
return Response.successResponse("更新成功");
}
更新结果:
json数组中新增对象
/**
* json数组中新增对象
*
* @return
*/
@PostMapping("/mongoUpdateJson2")
public Response mongoUpdateJson2(){
JSONObject jsonObject = new JSONObject();
jsonObject.put("songfayuan", "新的对象哦!!!!");
jsonObject.put("age", "28");
jsonObject.put("gender", "男");
Query query = Query.query(Criteria.where("_id").is("60c1dd52c6f19836a37fddc6"));
Update update = new Update();
update.addToSet("groupGoodsInfo", jsonObject);
mongoTemplate.upsert(query, update, "mongo_json_test");
return Response.successResponse("更新成功");
}
新增结果:
删除json数组中的一个对象
/**
* 删除json数组中的一个对象
*
* @return
*/
@PostMapping("/mongoPullJson")
public Response mongoPullJson(){
Query query = Query.query(Criteria.where("_id").is("60c1dd52c6f19836a37fddc6"));
BasicDBObject s = new BasicDBObject();
s.put("songfayuan", "测试数据");
Update update = new Update();
update.pull("groupGoodsInfo", s);
mongoTemplate.updateFirst(query, update, "mongo_json_test");
return Response.successResponse("更新成功");
}
删除结果:
更新json对象中的非嵌套对象
/**
* 更新json对象中的非嵌套对象
*
* @return
*/
@PostMapping("/mongoUpdateJson1")
public Response mongoUpdateJson1(){
Query query = new Query(Criteria.where("_id").is("60c1dd52c6f19836a37fddc6"));
Update update = Update.update("warehouseConfigId", "ABCD123456").set("remarks", "我被更新了!");
mongoTemplate.updateFirst(query, update, "mongo_json_test");
return Response.successResponse("更新成功");
}
更新非数组嵌套对象
当groupGoodsInfo不是数组时,是一个对象时,更新对象。
数据格式:
{
"id": "1",
"warehouseConfigId": "1",
"remarks": "备注信息",
"groupGoodsInfo": {
"ids": "1008601",
"planNumber": "计划编号0001",
"productId": "1",
"shopName": "店铺名称01",
"shopId": "1",
"fnsku": "fnsku",
"quantity": "9",
"inventoryQuantity": "10",
"remarks": "备注信息"
}
}
新增结果:
更新非数组嵌套对象:
/**
* 更新非数组嵌套对象
*
* @return
*/
@PostMapping("/mongoUpdateJson4")
public Response mongoUpdateJson4(){
Query query = new Query(Criteria.where("_id").is("60c1e63dc6f19836a37fde30"));
Update update = Update.update("groupGoodsInfo.shopName", "啦啦啦啦啦啦").set("groupGoodsInfo.remarks", "我被更新啦!!!");
mongoTemplate.updateFirst(query, update, "mongo_json_test");
return Response.successResponse("更新成功");
}
其他常用方法见如下工具中
package com.github.amazon.admin.controller.demo;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.github.amazon.common.util.Response;
import com.mongodb.BasicDBObject;
import com.mongodb.WriteResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.web.bind.annotation.*;
import java.util.*;
/**
* MongoDB常用基础操作方法
*
* 测试代码中使用到的json格式如下
*
* </p>
*
* @author songfayuan
* @date 2021/6/10 5:35 下午
*/
@Slf4j
@RestController
@RequestMapping("/demo")
public class MongoDemoController {
@Autowired
private MongoTemplate mongoTemplate;
/**
* MongoDB新增数据
*
* 区别
* 插入重复数据
* insert: 若新增数据的主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常提示主键重复,不保存当前数据。
* save: 若新增数据的主键已经存在,则会对当前已经存在的数据进行修改操作。
*
* 批操作
* insert: 可以一次性插入一整个列表,而不用进行遍历操作,效率相对较高
* save: 需要遍历列表,进行一个个的插入
*
* ---------------------
* 作者:宋发元
* 来源:CSDN
* 原文:https://blog.csdn.net/u011019141/article/details/89192757
* 版权声明:本文为博主原创文章,转载请附上博文链接!
*
* @param
* @return Response
* @author songfayuan
*/
@PostMapping("/mongoSave")
public Response mongoSave(){
Map<String, Object> map = new HashMap<>();
//map.put("_id", "10086");
map.put("name", "songfayuan");
map.put("age", "28");
map.put("wechat", "songfayuan1688");
this.mongoTemplate.save(map, "collectionName1");
this.mongoTemplate.insert(map, "collectionName2");
return Response.successResponse("新增成功");
}
/**
* MongoDB存储json格式数据
*
* json数据可以是JSONObject,也可以是JSONArray
*
* @param jsonObject
* @return
*/
@PostMapping("/mongoAddJsonData")
public Response mongoAddJsonData(@RequestBody JSONObject jsonObject){
this.mongoTemplate.insert(jsonObject, "mongo_json_test");
return Response.successResponse("新增成功");
}
/**
* MongoDB根据条件删除数据
*
* @return
*/
@DeleteMapping("/mongoRemove")
public Response mongoRemove(){
Query query = new Query();
query.addCriteria(Criteria.where("_id").in("10086"));
this.mongoTemplate.remove(query, "collectionName1");
return Response.successResponse("删除成功");
}
/**
* MongoDB根据条件更新数据
*
* @return
*/
@PostMapping("/mongoUpdate")
public Response mongoUpdate(){
List<String> list = new ArrayList<>();
list.add("10086");
list.add("10000");
Query query = new Query();
query.addCriteria(Criteria.where("_id").in(list));
Update update = new Update();
update.set("age", "120");
update.set("updateTime", new Date());
this.mongoTemplate.updateMulti(query, update,"collectionName1");
return Response.successResponse("更新成功");
}
/**
* 更新json对象中的非嵌套对象
*
* @return
*/
@PostMapping("/mongoUpdateJson1")
public Response mongoUpdateJson1(){
Query query = new Query(Criteria.where("_id").is("60c1dd52c6f19836a37fddc6"));
Update update = Update.update("warehouseConfigId", "ABCD123456").set("remarks", "我被更新了!");
mongoTemplate.updateFirst(query, update, "mongo_json_test");
return Response.successResponse("更新成功");
}
/**
* 更新json对象中的嵌套对象
*
* @return
*/
@PostMapping("/mongoUpdateJson")
public Response mongoUpdateJson(){
Query query = new Query(Criteria.where("_id").is("60c1dd52c6f19836a37fddc6").and("groupGoodsInfo.ids").is("1008601"));
Update update = Update.update("groupGoodsInfo.$.planNumber", "ABCD123456").set("groupGoodsInfo.$.shopName", "我被更新了!");
mongoTemplate.updateFirst(query, update, "mongo_json_test");
return Response.successResponse("更新成功");
}
/**
* 更新json对象中的多层嵌套对象
*
* @return
*/
@PostMapping("/mongoUpdateJson3")
public Response mongoUpdateJson3(){
JSONArray jsonArray = new JSONArray();
JSONObject jsonObject = new JSONObject();
jsonObject.put("songfayuan", "测试数据");
jsonObject.put("age", "28");
jsonObject.put("gender", "男");
jsonArray.add(jsonObject);
jsonArray.add(jsonObject);
Query query = new Query(Criteria.where("_id").is("60c1dd52c6f19836a37fddc6").and("groupGoodsInfo.ids").is("1008601"));
Update update = Update.update("groupGoodsInfo.$.singleGoodsInfo", jsonArray).set("groupGoodsInfo.$.remarks",jsonArray);
WriteResult writeResult = mongoTemplate.updateFirst(query, update, "mongo_json_test");
return Response.successResponse("更新成功");
}
/**
* 更新非数组嵌套对象
*
* @return
*/
@PostMapping("/mongoUpdateJson4")
public Response mongoUpdateJson4(){
Query query = new Query(Criteria.where("_id").is("60c1e63dc6f19836a37fde30"));
Update update = Update.update("groupGoodsInfo.shopName", "啦啦啦啦啦啦").set("groupGoodsInfo.remarks", "我被更新啦!!!");
mongoTemplate.updateFirst(query, update, "mongo_json_test");
return Response.successResponse("更新成功");
}
/**
* json数组中新增对象
*
* @return
*/
@PostMapping("/mongoUpdateJson2")
public Response mongoUpdateJson2(){
JSONObject jsonObject = new JSONObject();
jsonObject.put("songfayuan", "新的对象哦!!!!");
jsonObject.put("age", "28");
jsonObject.put("gender", "男");
Query query = Query.query(Criteria.where("_id").is("60c1dd52c6f19836a37fddc6"));
Update update = new Update();
update.addToSet("groupGoodsInfo", jsonObject);
mongoTemplate.upsert(query, update, "mongo_json_test");
return Response.successResponse("更新成功");
}
/**
* 删除json数组中的一个对象
*
* @return
*/
@PostMapping("/mongoPullJson")
public Response mongoPullJson(){
Query query = Query.query(Criteria.where("_id").is("60c1dd52c6f19836a37fddc6"));
BasicDBObject s = new BasicDBObject();
s.put("songfayuan", "新的对象哦!!!!");
Update update = new Update();
update.pull("groupGoodsInfo", s);
mongoTemplate.updateFirst(query, update, "mongo_json_test");
return Response.successResponse("更新成功");
}
/**
* MongoDB获取数据库中的所有文档集合
*
* @return
*/
@GetMapping("/mongoGetCollectionNames")
public Response mongoGetCollectionNames(){
Set<String> set = this.mongoTemplate.getCollectionNames();
return Response.success(set);
}
/**
* MongoDB根据条件查询一条数据
*
* @return
*/
@GetMapping("/mongoFindOne")
public Response mongoFindOne() {
Query query = new Query();
query.addCriteria(Criteria.where("_id").is("10086"));
return Response.success(this.mongoTemplate.findOne(query, Map.class,"collectionName1"));
}
/**
* MongoDB根据条件查询列表数据
*
* @return
*/
@GetMapping("/mongoFindList")
public Response mongoFindList() {
Query query = new Query();
query.addCriteria(Criteria.where("name").is("songfayuan"));
return Response.success(this.mongoTemplate.find(query, Map.class,"collectionName1"));
}
}
更多推荐
已为社区贡献5条内容
所有评论(0)