2017-06-12 69 views
0

我只是试图在Kotlin中做一个干净的虚拟项目来练习,但是像Kotlin一样,插入方法也是如此。我想它会以其他方式插入并取回项目,而不是以前提出2个请求的方式。Kotlin Kmongo插入并返回插入的项目

fun insert(book: Book) : Book? { 
    getByEan(book.EAN)?.let { 
    return null 
    } 
    mongo.collection.insertOne(book) 
    return getByEan(book.EAN) 
} 

因此,在这种情况下,我做了一个预查不使用相同的EAN物品,然后,如果成功则返回插入的项目。

它可以更简单吗?也许预先检查与索引或以某种方式取回插入的项目没有新的要求?

+1

从技术上讲,实际返回文档的唯一方法是使用“.findOneAndUpdate()”方法设置“upsert”选项。问题是,如果你“插入”文件,那么你肯定已经拥有了内容。因此,因为'.insert()'将返回新的'_id'值,这实际上应该是您没有的数据库中唯一的信息。不是吗?如果您有其他数据是“唯一”的,那么将其用于'_id'或者创建一个“唯一索引”来阻止它首先创建重复信息。 –

+0

谢谢!你明白了!我现在看到我应该怎么做。 – Guigreg

回答

0
fun insert(book: Book) : Book? { 
    getByEan(book.EAN)?.let { 
     return null 
    } 
    return book.apply { mongo.collection.insertOne(book) } 
} 

data class Book(val name: String, val EAN: Int, val author: String, val _id: String? = null) 

通过添加_id字段数据模型中的插入之后它会设置与所生成的ID的值。在这种情况下,这个代码片段会按照我的意愿返回插入的对象,而不会向数据库发出加号请求。