gpt4 book ai didi

scala - 如何使用 Casbah 在 MongoDB 上按对象 ID 查找?

转载 作者:行者123 更新时间:2023-12-02 05:02:54 26 4
gpt4 key购买 nike

我正在尝试编写一个查询来通过 Casbah 的对象 ID 进行查找,这看起来很简单,但是......我找不到。

我尝试过这个:

def get(id: Option[String]): User = { 
val mongoDB : MongoDB = MongoConnection().apply("test")
val mongoColl : MongoCollection = mongoDB.apply("users")
val objectId = id.getOrElse().asInstanceOf[String]
val o : DBObject = MongoDBObject("_id" -> objectId)
val u = mongoColl.findOne(o)
val user = new User()
for(x <- u){
user.id = x.getAs[String]("_id")
user.username = x.getAs[String]("username")
user.password = x.getAs[String]("password")
}
user
}

还有这个:

def get(id: Option[String]): User = { 
val mongoDB : MongoDB = MongoConnection().apply("test")
val mongoColl : MongoCollection = mongoDB.apply("users")
val objectId = "ObjectId(\"" +id.getOrElse().asInstanceOf[String] + "\")"
val o : DBObject = MongoDBObject("_id" -> objectId)
val u = mongoColl.findOne(o)
val user = new User()
for(x <- u){
user.id = x.getAs[String]("_id")
user.username = x.getAs[String]("username")
user.password = x.getAs[String]("password")
}
user
}

编译并运行但没有结果。我也尝试过这个:

def get(id: Option[String]): User = { 
val mongoDB : MongoDB = MongoConnection().apply("test")
val mongoColl : MongoCollection = mongoDB.apply("users")
val objectId : ObjectId = id.getOrElse().asInstanceOf[ObjectId]
val o : DBObject = MongoDBObject("_id" -> objectId)
val u = mongoColl.findOne(o)
val user = new User()
for(x <- u){
user.id = x.getAs[String]("_id")
user.username = x.getAs[String]("username")
user.password = x.getAs[String]("password")
}
user
}

但是这个无法编译,因为 String 无法转换为 ObjectId。

java.lang.ClassCastException: java.lang.String cannot be cast to org.bson.types.ObjectId

感谢您的帮助:)

最佳答案

“_id”通常在 MongoDB 中存储为 ObjectID,而不是字符串...字符串和 ObjectID 是不同的类型,您不能将字符串转换为 ObjectId。 ObjectId 在 MongoDB 中也是一种不同的类型,因此 ObjectId("abcdefgh123") 与字符串“abcdefgh123”不同。

您需要在 Casbah 中按 ObjectID 进行搜索。试试这个:

def get(id: Option[ObjectId]): User = { 
val mongoDB : MongoDB = MongoConnection().apply("test")
val mongoColl : MongoCollection = mongoDB.apply("users")
val objectId : ObjectId = id.getOrElse().asInstanceOf[ObjectId]
id.foreach( oid => {
val o : DBObject = MongoDBObject("_id" -> oid)
val u = mongoColl.findOne(o)
val user = new User()
for(x <- u){
user.id = x.getAs[ObjectId]("_id")
user.username = x.getAs[String]("username")
user.password = x.getAs[String]("password")
}
user
})
}

关于scala - 如何使用 Casbah 在 MongoDB 上按对象 ID 查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5574893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com