Documentation is a work in progress — some pages may be incomplete.
Unify

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.

On this page