Mongodb Scala根据最大值筛选列表
我有以下地图:Mongodb Scala根据最大值筛选列表,mongodb,scala,Mongodb,Scala,我有以下地图: [ { "animal": "dog", "age": 1}, { "animal": "dog", "age": 2}, { "animal": "dog", "age": 3}, { "animal": "cat", "age": 1}, { "animal": "cat", "age": 4}, { "animal": "rabbit", "age": 9} ] 我如何返回一个结果,以便得到最大年龄的狗、猫和兔子。例如: [ { "anim
[
{ "animal": "dog", "age": 1},
{ "animal": "dog", "age": 2},
{ "animal": "dog", "age": 3},
{ "animal": "cat", "age": 1},
{ "animal": "cat", "age": 4},
{ "animal": "rabbit", "age": 9}
]
我如何返回一个结果,以便得到最大年龄的狗、猫和兔子。例如:
[
{ "animal": "dog", "age": 3}, # oldest dog in DB
{ "animal": "cat", "age": 4}, # oldest cat in DB
{ "animal": "rabbit", "age": 9} # oldest rabbit in DB
]
我正在尝试使用两个scala.map()聚合来实现这一点,但到目前为止没有成功。假设一个case类,如
case class Pet(animal:String,age:Int)
:
对于列表[BSONDocument]
,相同的概念:
list.groupBy(_.getAs[String]("animal")).values.map(_.maxBy(_.getAs[Int]("age"))).toList
列表的类型是什么<代码>列表[JsValue]<代码>列表[SomeCustomType]?@AlvaroCarrasco它的
未来[List[BSONDocument]]
这是Mongodby的一个结果。你可以编写一个mongodb查询,只返回最古老的动物:@soote:是的,我先尝试了,但它返回了一个复杂的JSON,而且更不明显的是,除了动物名称和年龄之外,它还可以显示所有其他字段列表.groupBy(u.animal).mapValues(u.maxBy(.age))…
?@AlvaroCarrasco:这可以在不使用case类的情况下完成吗?
list.groupBy(_.getAs[String]("animal")).values.map(_.maxBy(_.getAs[Int]("age"))).toList