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)