ObjectIds不会从集合中检索(Scala + MongoDB)



我的计算机上有一个带有数据库的mongodb实例。其中一个收藏中有几个文件,我手动插入了它们。有一个Scala应用程序来操纵数据库。有一个名为位置的案例类。

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字符串。有一个控制器端点,该端点返回数据库中的所有位置。结果是:

[{"_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?

最新更新