我在處理應用程序中的BSONDocuments的可選值時遇到困難。我從Typesafe activator的「最終」模板開始(play/reactivemongo/angular)。我創建代表對象進入蒙戈的情況下類,以及一些值是選項:處理BSONDocument中的可選值
case class Item(
id: Option[BSONObjectID],
manufacturer: String,
minPrice: Option[Double],
maxPrice: Option[Double])
我遇到的問題是,可選的值越來越寫入蒙戈爲數組。出於示例目的,使用「Acme」作爲製造商,88作爲minPrice和None作爲maxPrice。 Printjson在蒙戈表明,這看起來像
{
_id = BSONObjectID("...")
manufacturer: "Acme",
maxPrice: [ ],
minPrice: [
88
]
}
創建從數據庫中值的對象的時候,我不能讀回從蒙戈數組值作爲一個簡單的期權價值。
Item(
....
bsondoc.getAs[Double]("minPrice"),
....
)
這getAs()語句總是返回無,但bsondoc.get( 「minPrice」)確實有一些價值(BSONDocument())
我打印的數據被髮送到蒙戈的更新,當然,創建修飾語句的代碼將以數組的形式發送可選值,該數組可以是空的,也可以包含一個元素。
val modifier = BSONDocument(
"$set" -> BSONDocument(
"manufacturer" -> manufacturer,
"minPrice" -> minPrice,
"maxPrice" -> maxPrice
))
這個漂亮的版畫作爲
{
$set: {
manufacturer: BSONString(Acme),
maxPrice: [
],
minPrice: [
0: BSONDouble(88.0)
]
}
}
是否有正確的方式來處理這些可選值?
爲了增加神祕感,我把同樣的修改,創建代碼在工作表中(在Eclipse),我也得到了不同的結果:
{
$set: {
manufacturer = BSONString(Acme),
minPrice = BSONInteger(88)
}
}
可選的值沒有一個數組。如果他們沒有,他們不會出現。這對我的應用程序來說工作得很好,但是有些東西正在改變應用程序內部可選元素的BSONDocument處理。有誰知道爲什麼?
我在調試中做了足夠的跟蹤,以確定在創建包含名稱和值的Tuple2後,匿名函數調用BSON雙處理函數,然後調用collectionToBSONArrayCollectionWriter。我看不到該函數中的代碼,因此很難說出發生了什麼。 – Willard
你使用什麼版本的ReactiveMongo? –
@Willard好奇,如果你找到解決方案,因爲我遇到同樣的問題? – shuttj