Mongo 模板 - 创建或更新
Mongo Template - create or update
我有一个代表项目的集合,
该集合有多个索引(不是一个唯一的 id)。
模型看起来像:
data class Item {
_id
customer_id
item_type: (game / movie / equipment)
}
我想创建一个使用这些索引来查找或创建的查询,例如:
val item: Item
mongoTemplate.findOrCreate(customer_id: x, item_type: y, item)
我当然可以保证不会有2件商品的customer_id和类型相同
您可以创建这样的函数:
fun MongoTemplate.findOrCreate(customer_id: String, item_type: String): Item {
val query = Query.query(
Criteria().andOperator(
Criteria.where("customer_id").`is`(customer_id),
Criteria.where("item_type").`is`(item_type)
)
)
return findOne(query, Item::class.java, "collectionName")
?: insert(Item(customer_id, item_type), "collectionName")
}
MongoTemplate.findOne 将 return 对象,如果找不到则为 null,如果为 null 我们使用 MongoTemplate.insert 插入新对象。插入也将 return 对象。
你可以这样调用这个函数:
val item: Item = mongoTemplate.findOrCreate(customer_id: x, item_type: y)
我有一个代表项目的集合, 该集合有多个索引(不是一个唯一的 id)。 模型看起来像:
data class Item {
_id
customer_id
item_type: (game / movie / equipment)
}
我想创建一个使用这些索引来查找或创建的查询,例如:
val item: Item
mongoTemplate.findOrCreate(customer_id: x, item_type: y, item)
我当然可以保证不会有2件商品的customer_id和类型相同
您可以创建这样的函数:
fun MongoTemplate.findOrCreate(customer_id: String, item_type: String): Item {
val query = Query.query(
Criteria().andOperator(
Criteria.where("customer_id").`is`(customer_id),
Criteria.where("item_type").`is`(item_type)
)
)
return findOne(query, Item::class.java, "collectionName")
?: insert(Item(customer_id, item_type), "collectionName")
}
MongoTemplate.findOne 将 return 对象,如果找不到则为 null,如果为 null 我们使用 MongoTemplate.insert 插入新对象。插入也将 return 对象。
你可以这样调用这个函数:
val item: Item = mongoTemplate.findOrCreate(customer_id: x, item_type: y)