gpt4 book ai didi

mongodb - 如何在 MongoDB 中有效地编码 Scala 元组

转载 作者:可可西里 更新时间:2023-11-01 09:55:13 26 4
gpt4 key购买 nike

给定以下类型

type GeoLocation = (Double, Double)

我想将其存储在我的数据库中

location: [-55.23, 123.7]

此外,位置数据是可选的,因此 API 公开了 Option[GeoLocation]。当需要存储数据时,我会对其进行转换。

val coordinates: Option[GeoLocation] = ...
val location = coordinates match {
case Some((lng, lat)) => Some(lng :: lat :: Nil)
case None => None
}

这样我就可以有选择地将它添加到包含的文档中。

location.map(doc.put("location", _))

当我想将 if 从数据库对象转换回 GeoLocation 时,我做了这个令人讨厌的事情......

val coordinates = dbo.getAs[MongoDBList]("location").map(_.toList.map(_.asInstanceOf[Double])) match {
case Some(List(lng, lat)) => Some(lng, lat)
case None => None
}

在我看来,将元组作为数组存储在 MongoDB 中有很多仪式。有没有更有效、更直接的方法来实现这一点?

最佳答案

这是编写相同内容的更简单方法:

val coordinates = dbo.getAs[Seq[Double]]("location").map { case Seq(lng, lat) => (lng, lat) }

如果你想得到更多的保护(如果数组中有两个以上的元素就不会得到 MatchError)你可以“捕捉”剩下的:

val coordinates = dbo.getAs[Seq[Double]]("location") match {
case Some(Seq(lng, lat)) => Some(lng, lat)
case _ => None
}

关于mongodb - 如何在 MongoDB 中有效地编码 Scala 元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33985966/

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