Incremental field spring-data-mongo with Kotlin

Posted by

Context

We develop a tree view. We want to have an incremental number for the new node.

Solution

@Service
class SequenceGeneratorService(val mongoOperations: MongoOperations) {

    fun generateSequence(seqName: String?): Long {
        val counter = mongoOperations.findAndModify(
            query(Criteria("_id").`is`(seqName)),
            Update().inc("seq", 1), FindAndModifyOptions.options().returnNew(true).upsert(true),
            DatabaseSequence::class.java
        )
        return if (!Objects.isNull(counter)) counter!!.seq else 1
    }

}

Usage

@Service
class NodeService(val sequenceGeneratorService: SequenceGeneratorService) {
    fun createNewNode() {
      val node = Node()
      var node.id = sequenceGeneratorService.generateSequence("node_sequence")
      
    }
}

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.