From 79ed71efaee087b463cf977f6bd1ff57dba2b2e7 Mon Sep 17 00:00:00 2001 From: tursom Date: Wed, 19 Feb 2020 03:09:37 +0800 Subject: [PATCH] impl mongo module --- .../src/main/kotlin/cn/tursom/mongodb/MongoOperator.kt | 7 ++++--- .../mongodb/src/main/kotlin/cn/tursom/mongodb/MongoUtil.kt | 3 ++- .../mongodb/src/main/kotlin/cn/tursom/mongodb/Update.kt | 2 ++ 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/database/mongodb/src/main/kotlin/cn/tursom/mongodb/MongoOperator.kt b/database/mongodb/src/main/kotlin/cn/tursom/mongodb/MongoOperator.kt index 6b1885a..7e12674 100644 --- a/database/mongodb/src/main/kotlin/cn/tursom/mongodb/MongoOperator.kt +++ b/database/mongodb/src/main/kotlin/cn/tursom/mongodb/MongoOperator.kt @@ -20,6 +20,7 @@ class MongoOperator( constructor(clazz: Class, database: MongoDatabase) : this(database.getCollection(MongoUtil.collectionName(clazz), clazz), clazz) private val fields = clazz.declaredFields.filter { + it.isAccessible = true !it.isTransient() && it.getAnnotation(Ignore::class.java) == null } @@ -49,17 +50,17 @@ class MongoOperator( @Suppress("SpellCheckingInspection") fun upsert(update: Bson, where: Bson, options: UpdateOptions = UpdateOptions()): UpdateResult { - return update(convertToBson(update), where, options.upsert(true)) + return update(update, where, options.upsert(true)) } - fun add(field: KProperty1, value: Number, where: Bson, options: UpdateOptions = UpdateOptions()): UpdateResult { + fun add(field: KProperty1, value: Number, where: Bson, options: UpdateOptions = UpdateOptions()): UpdateResult { return upsert( Update { field inc value }, where, options ) } - fun inc(field: KProperty1, where: Bson): UpdateResult { + fun inc(field: KProperty1, where: Bson): UpdateResult { return add(field, 1, where) } diff --git a/database/mongodb/src/main/kotlin/cn/tursom/mongodb/MongoUtil.kt b/database/mongodb/src/main/kotlin/cn/tursom/mongodb/MongoUtil.kt index b50f46d..7186360 100644 --- a/database/mongodb/src/main/kotlin/cn/tursom/mongodb/MongoUtil.kt +++ b/database/mongodb/src/main/kotlin/cn/tursom/mongodb/MongoUtil.kt @@ -28,10 +28,11 @@ object MongoUtil { fun convertToBson(entity: Any): Bson { val bson = Document() entity.javaClass.declaredFields.filter { + it.isAccessible = true !it.isTransient() && it.getAnnotation(Ignore::class.java) == null }.forEach { val value = it.get(entity) ?: return@forEach - bson[MongoUtil.fieldName(it)] = value + bson[fieldName(it)] = value } return bson } diff --git a/database/mongodb/src/main/kotlin/cn/tursom/mongodb/Update.kt b/database/mongodb/src/main/kotlin/cn/tursom/mongodb/Update.kt index bf1b27a..518d66d 100644 --- a/database/mongodb/src/main/kotlin/cn/tursom/mongodb/Update.kt +++ b/database/mongodb/src/main/kotlin/cn/tursom/mongodb/Update.kt @@ -7,6 +7,8 @@ import kotlin.reflect.KProperty object Update { operator fun invoke(action: Update.() -> Bson) = this.action() + infix fun Bson.and(update: Bson): Bson = Updates.combine(this, update) + fun combine(vararg updates: Bson): Bson = Updates.combine(*updates) infix fun KProperty<*>.set(value: Any): Bson = Updates.set(MongoUtil.fieldName(this), value) fun KProperty<*>.unset(): Bson = Updates.unset(MongoUtil.fieldName(this))