Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Kotlin Kmongo插入并返回插入的项目_Java_Mongodb_Kotlin - Fatal编程技术网

Java Kotlin Kmongo插入并返回插入的项目

Java Kotlin Kmongo插入并返回插入的项目,java,mongodb,kotlin,Java,Mongodb,Kotlin,我只是尝试在Kotlin中创建一个干净的虚拟项目来进行实践,但正如Java所做的那样,Kotlin以同样的方式使用insert方法。我认为这将是一些其他的方式来插入和取回项目,而不是旧的方式提出2个请求 fun insert(book: Book) : Book? { getByEan(book.EAN)?.let { return null } mongo.collection.insertOne(book) return getByEan(book.EAN)

我只是尝试在Kotlin中创建一个干净的虚拟项目来进行实践,但正如Java所做的那样,Kotlin以同样的方式使用insert方法。我认为这将是一些其他的方式来插入和取回项目,而不是旧的方式提出2个请求

fun insert(book: Book) : Book? {
   getByEan(book.EAN)?.let {
     return null
   }
   mongo.collection.insertOne(book)
   return getByEan(book.EAN)
}
因此,在本例中,我做了一个预检查,不使用相同EAN的项目,如果成功,则返回插入的项目

它能更简单吗?可能是通过索引进行预检查,或者在没有新请求的情况下以某种方式返回插入的项目

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设置值。在这种情况下,此代码段将按照我的要求返回插入的对象,而无需向数据库发送加号请求。

从技术上讲,实际返回文档的唯一方法是一个类似.findOneAndUpdate的带有向上插入选项集。但是问题仍然是,如果您正在插入文档,那么您肯定已经有了内容。既然.insert将返回新的_id值,那么这应该是数据库中唯一没有的信息。不是吗?如果您有其他唯一的数据,那么可以将其用于_id,或者创建一个唯一的索引,以首先阻止使用重复信息创建它。谢谢!你说得对!我现在明白该怎么办了。