我正在从本地 Realm 转换为由 MongoDB 服务器支持的 Realm。我按照 tutorial 进行操作,一切似乎都很顺利,但是当我尝试编写连接代码时,我在 MongoClient.create 上得到了一个未解决的参考。
我的代码如下所示:
import com.mongodb.reactivestreams.client.MongoClient
import io.realm.kotlin.Realm
import io.realm.kotlin.RealmConfiguration
import io.realm.kotlin.ext.isManaged
import io.realm.kotlin.ext.query
import io.realm.kotlin.query.RealmResults
import org.mongodb.kbson.ObjectId
import todaysDateAsLong
import kotlinx.coroutines.runBlocking
import org.w3c.dom.Document
import javax.management.Query.eq
fun connectToRealmServer() {
// Replace the placeholders with your credentials and hostname
val uri = "mongodb+srv://MyCompany:<password>@atlascluster.j1c9yxd.mongodb.net/?retryWrites=true&w=majority&appName=AtlasCluster"
val mongoClient = MongoClient.create(uri) //<-- UNRESEOLVED REFERENCE on .create
val database = mongoClient.getDatabase("sample_mflix")
val collection = database.getCollection<Document>("movies")
runBlocking {
val doc = collection.find(eq("title", "Back to the Future")).firstOrNull()
if (doc != null) {
println(doc.toJson())
} else {
println("No matching documents found.")
}
}
mongoClient.close()
}
我的 build.gradle 看起来像这样(缩小到仅相关区域)
plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidApplication)
alias(libs.plugins.jetbrainsCompose)
id("io.realm.kotlin") version "1.11.1"
}
....
dependencies {
implementation(libs.androidx.material)
implementation(libs.androidx.material3.android)
implementation(libs.mongodb.driver.kotlin.coroutine)
implementation(libs.bson.kotlinx)
}
相关的 libs.version.toml 条目如下所示:
mongodb-driver-kotlin-coroutine = { module = "org.mongodb:mongodb-driver-kotlin-coroutine", version = "5.1.0" }
[plugins]
androidApplication = { id = "com.android.application", version.ref = "agp" }
androidLibrary = { id = "com.android.library", version.ref = "agp" }
jetbrainsCompose = { id = "org.jetbrains.compose", version.ref = "compose-plugin" }
kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref =
"kotlin" }
有人能发现我做错了什么吗?从本地领域到云的过程中,我是否需要删除可能导致此问题的内容?
附图显示了 Android Studio 中的一些配置,以防有帮助。
有几件事:
我建议查看有关将同步添加到应用程序的入门文档,因为它非常简单且经过充分测试将设备同步添加到应用程序 - Kotlin SDK
如果您使用
MongoClient.create
(根据问题),那么需要传递一个 MongoClientSettings 对象。该对象应该用 .builder 实例化。像这样的一些简短的代码就可以了
val mongoClient = MongoClient.create(
MongoClientSettings.builder()
.applyConnectionString(ConnectionString("<your connection string>"))
.build()
)
连接字符串将采用这种格式
"mongodb+srv:/<username>:<password>@<hostname>:<port>?connectTimeoutMS(2000)"
ConnectionString 类还有其他选项。