Skip to content

Quick Start

Get up and running with Konduct in 5 minutes!

Step 1: Define Your Model

import org.springframework.data.annotation.Id
import org.springframework.data.mongodb.core.mapping.Document

@Document("products")
data class Product(
    @Id val id: String? = null,
    val name: String,
    val price: Double,
    val category: String,
    val status: String,
    val rating: Double? = null
)

Step 2: Create a Service

import io.github.denofbits.konduct.core.Konduct
import org.springframework.data.mongodb.core.MongoTemplate
import org.springframework.stereotype.Service

@Service
class ProductService(mongoTemplate: MongoTemplate) {

    private val konduct = Konduct(mongoTemplate)

    fun getActiveProducts(): List<Product> {
        return konduct.collection<Product>()
            .match { Product::status eq "active" }
            .sort { Product::price.asc() }
            .toList()
    }
}

Step 3: Use It!

@RestController
@RequestMapping("/api/products")
class ProductController(private val productService: ProductService) {

    @GetMapping
    fun getProducts(): List<Product> {
        return productService.getActiveProducts()
    }
}

Common Patterns

Filtering

konduct.collection<Product>()
    .match {
        Product::status eq "active"
        Product::price gte 100
        Product::category `in` listOf("Electronics", "Books")
    }
    .toList()

Sorting

konduct.collection<Product>()
    .sort {
        Product::category.asc()
        Product::price.desc()
    }
    .toList()

Pagination

val result = konduct.collection<Product>()
    .match { Product::status eq "active" }
    .paginate(page = 0, pageSize = 20)
    .firstOrNull()

println("Total: ${result?.total}")
println("Items: ${result?.data?.size}")

Grouping

konduct.collection<Order>()
    .group {
        by(Order::customerId)
        accumulate {
            "totalSpent" sum Order::amount
            "orderCount" count Unit
            "avgOrder" avg Order::amount
        }
    }
    .toList()

Next Steps