不从集合中检索 ObjectIds (Scala + MongoDB)
ObjectIds don't get retrieved from collection (Scala + MongoDB)
我的计算机上有一个带有数据库的 MongoDB 实例。其中一个集合中有几个文档,我手动插入了它们。有一个 Scala 应用程序来操作数据库。有一个案例 class 叫做 Location.
case class Location(_id: Option[ObjectId] = None, name: String) {
var visible: Boolean = false
}
这是应用程序中的 MongoDB 配置。
private val customCodecs = fromProviders(
classOf[Location]
)
private val javaCodecs =
fromCodecs(new LocalDateTimeDateCodec(), new LocalDateDateCodec())
private val codecRegistry =
fromRegistries(customCodecs, javaCodecs,
DEFAULT_CODEC_REGISTRY)
val dbConnection = MongoClient(dbURI)
val database: MongoDatabase = dbConnection.getDatabase(dbName).withCodecRegistry(codecRegistry)
customCodecs
中还有更多 classOf
定义,只是删除了它们。 dbURI
字符串是从配置文件中检索的。
有一个控制器端点,returns 来自数据库的所有位置。结果是这样的:
[{"_id":{},"name":"Hungary","visible":false},{"_id":{},"name":"Germany","visible":false},{"_id":{},"name":"France","visible":false},{"_id":{},"name":"Switzerland","visible":false},{"_id":{},"name":"Poland","visible":false}]
数据库中的文档有ObjectId,因为我是手动输入的,有些文档应该有visibility
属性 true。我怀疑 JSON 序列化有问题,但无法弄清楚是什么。
这是查询集合的代码。
val query = collection.find().toFuture()
Await.result(query, 10.seconds).toList
服务方法调用此代码并将结果传递给控制器。
import org.json4s.native.Serialization.write
val languages = enrollmentService.getAllLanguages
logger.info("GET all languages")
Ok(Json.parse(write[List[Language]](languages)))
我使用 json4s JSON 序列化/反序列化。
这可能是什么问题?
也许您需要包含 org.json4s.mongo.ObjectIdSerializer?
我的计算机上有一个带有数据库的 MongoDB 实例。其中一个集合中有几个文档,我手动插入了它们。有一个 Scala 应用程序来操作数据库。有一个案例 class 叫做 Location.
case class Location(_id: Option[ObjectId] = None, name: String) {
var visible: Boolean = false
}
这是应用程序中的 MongoDB 配置。
private val customCodecs = fromProviders(
classOf[Location]
)
private val javaCodecs =
fromCodecs(new LocalDateTimeDateCodec(), new LocalDateDateCodec())
private val codecRegistry =
fromRegistries(customCodecs, javaCodecs,
DEFAULT_CODEC_REGISTRY)
val dbConnection = MongoClient(dbURI)
val database: MongoDatabase = dbConnection.getDatabase(dbName).withCodecRegistry(codecRegistry)
customCodecs
中还有更多 classOf
定义,只是删除了它们。 dbURI
字符串是从配置文件中检索的。
有一个控制器端点,returns 来自数据库的所有位置。结果是这样的:
[{"_id":{},"name":"Hungary","visible":false},{"_id":{},"name":"Germany","visible":false},{"_id":{},"name":"France","visible":false},{"_id":{},"name":"Switzerland","visible":false},{"_id":{},"name":"Poland","visible":false}]
数据库中的文档有ObjectId,因为我是手动输入的,有些文档应该有visibility
属性 true。我怀疑 JSON 序列化有问题,但无法弄清楚是什么。
这是查询集合的代码。
val query = collection.find().toFuture()
Await.result(query, 10.seconds).toList
服务方法调用此代码并将结果传递给控制器。
import org.json4s.native.Serialization.write
val languages = enrollmentService.getAllLanguages
logger.info("GET all languages")
Ok(Json.parse(write[List[Language]](languages)))
我使用 json4s JSON 序列化/反序列化。
这可能是什么问题?
也许您需要包含 org.json4s.mongo.ObjectIdSerializer?