MongoDB
Document storage with native JSON support
Honey's MongoDB backend stores your data classes as documents in collections. Perfect when you need flexible schemas or high write throughput.
When to Use
- Flexible or evolving schemas
- High write throughput (leaderboards, analytics)
- Document-oriented data (nested objects, arrays)
- Already running MongoDB in your stack
Setup
import me.jordanfails.honey.DataHandler
import me.jordanfails.honey.DataStoreType
import me.jordanfails.honey.connection.dataFramework
dataFramework {
mongo(
uri = "mongodb://localhost:27017/myplugin",
database = "myplugin"
)
}
val store = DataHandler.createStoreType<String, PlayerData>(DataStoreType.MONGO) {
it.id = "players" // collection name
}Authentication
dataFramework {
mongo(
uri = "mongodb://username:password@localhost:27017/myplugin",
database = "myplugin"
)
}Replica Sets
dataFramework {
mongo(
uri = "mongodb://host1:27017,host2:27017,host3:27017/myplugin?replicaSet=rs0",
database = "myplugin"
)
}Full Example
data class PlayerData(
val uuid: String,
var name: String,
var kills: Int = 0,
var deaths: Int = 0,
var inventory: List<String> = emptyList() // Mongo handles arrays natively
)
class MyPlugin : JavaPlugin() {
lateinit var store: DataStore<String, PlayerData>
override fun onEnable() {
dataFramework {
mongo(
uri = "mongodb://localhost:27017/myplugin",
database = "myplugin"
)
}
store = DataHandler.createStoreType(DataStoreType.MONGO) {
it.id = "players"
}
}
override fun onDisable() {
DataHandler.closeAllConnections()
}
fun addKill(player: Player) {
val data = store.retrieve(player.uniqueId.toString())
?: PlayerData(player.uniqueId.toString(), player.name)
data.kills++
store.store(data.uuid, data)
}
}In MongoDB
// Document in the "players" collection
{
"_id": "550e8400-e29b-41d4-a716-446655440000",
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"name": "JordanFails",
"kills": 42,
"deaths": 7,
"inventory": ["diamond_sword", "shield", "golden_apple"]
}Limitations
Honey's Mongo backend uses the document _id as the store key. You
cannot run custom Mongo queries through Honey — use the Mongo driver
directly if you need aggregation pipelines or complex filters.