注意事项: 1、保存方法1val query = Query() query.addCriteria(Criteria.where("_id").`is`(doctor.doctorId)) val json = objectMapper.writeValueAsString(doctor) val doc = Document.parse(json) if (!mongoTemplate.exists(query, "doctors")) { mongoTemplate.insert(doc, "doctors") } mongoTemplate.findAndReplace(query, doc, "doctors")
2、保存方法2mongoTemplate.save(doctor)
使用方法1保存时:LocalDate=String。可以使用BigDecimal保存 使用方法1保存时:LocalDate=LocalDate。不可以使用BigDecimal保存 不支持继承后的重写属性!!!
mongoTemplate实现内嵌文档查询修改操作
初始数据
{
"_id": "drink",
"product": "product",
"type": [
{
"name": "Cake",
"price": 10,
"count": NumberInt("1"),
"relevancy": [
{
"spu": "spu1",
"sku": "sku4"
},
{
"spu": "spu1",
"sku": "sku5"
},
{
"spu": "spu3",
"sku": "sku6"
}
]
},
{
"name": "Coffee",
"price": 2.5,
"count": NumberInt("3"),
"relevancy": [
{
"spu": "spu1",
"sku": "sku4"
},
{
"spu": "spu1",
"sku": "sku5"
},
{
"spu": "spu3",
"sku": "sku6"
}
]
},
{
"name": "Tea",
"price": 1.5,
"count": NumberInt("2"),
"relevancy": [
{
"spu": "spu1",
"sku": "sku4"
},
{
"spu": "spu1",
"sku": "sku5"
},
{
"spu": "spu3",
"sku": "sku6"
}
]
}
]
}
demo
@Operation(summary = "创建MongoDB测试数据", description = "创建MongoDB测试数据")
@RequestMapping(value = ["/test"], method = [RequestMethod.GET])
fun test(): Any? {
data("drink", "spu1")
data("food", "spu2")
return JSONObject.toJSON(mongoTemplate.find(Query(), String::class.java, "TestData"))
}
fun data(id: String, spu: String) {
data class Product(val spu: String, val sku: String)
data class OrderItem(val name: String, val price: Double, val count: Int, val relevancy: List<Product>)
val product = listOf<Product>(
Product(spu, "sku4"),
Product(spu, "sku5"),
Product("spu3", "sku6")
)
val order = listOf<OrderItem>(
OrderItem("Cake", price = 10.0, count = 1, product),
OrderItem("Coffee", price = 2.5, count = 3, product),
OrderItem("Tea", price = 1.5, count = 2, product)
)
val data = mapOf(
"_id" to id,
"product" to "product",
"type" to order
)
val objectMapper = ApplicationJsonObjectMapper()
val query = Query()
query.addCriteria(Criteria.where("_id").`is`(data["_id"]))
val json = objectMapper.writeValueAsString(data)
val doc = Document.parse(json)
if (!mongoTemplate.exists(query, "TestData")) {
mongoTemplate.insert(doc, "TestData")
}
mongoTemplate.findAndReplace(query, doc, "TestData")
}
@Operation(summary = "MongoDB查询修改删除测试", description = "MongoDB查询修改删除测试")
@RequestMapping(value = ["/test1"], method = [RequestMethod.GET])
fun test1(): Any? {
return data1()
}
fun data1(): Any? {
data class OrderItem(val name: String, val price: Double, val count: Int)
data class Product(val spu: String, val sku: String)
val order = OrderItem("Xiao", price = 10000.0, count = 5000)
val deleted = OrderItem("Cake", price = 10.0, count = 1)
val product = Product("spu111", "sku111")
val query = Query()
query.addCriteria(Criteria.where("type.relevancy.spu").`is`("spu1"))
/* val s = BasicDBObject()
s["name"] = "Cake"
val update: Update = Update().pull("type", s)*/ //文档删除操作
// val update: Update = Update().set("type.$.", order) //嵌套文档更新操作
val update: Update = Update().set("type.$[].relevancy.$[i]", product).filterArray("i.spu", "spu1") //嵌套文档中的嵌套文档更新操作
mongoTemplate.updateMulti(query, update, "TestData")
return JSONObject.toJSONString(mongoTemplate.find(query, String::class.java, "TestData"))
// return mongoTemplate.updateFirst(query, update, "TestData")
}
代码效果图
{
"_id": "drink",
"product": "product",
"type": [
{
"name": "Cake",
"price": 10,
"count": NumberInt("1"),
"relevancy": [
{
"spu": "spu111",
"sku": "sku111"
},
{
"spu": "spu111",
"sku": "sku111"
},
{
"spu": "spu3",
"sku": "sku6"
}
]
},
{
"name": "Coffee",
"price": 2.5,
"count": NumberInt("3"),
"relevancy": [
{
"spu": "spu111",
"sku": "sku111"
},
{
"spu": "spu111",
"sku": "sku111"
},
{
"spu": "spu3",
"sku": "sku6"
}
]
},
{
"name": "Tea",
"price": 1.5,
"count": NumberInt("2"),
"relevancy": [
{
"spu": "spu111",
"sku": "sku111"
},
{
"spu": "spu111",
"sku": "sku111"
},
{
"spu": "spu3",
"sku": "sku6"
}
]
}
]
}