2013-10-31 64 views
0

對於給定的JSON,如何讓_id將它用作插入另一個JSON的ID?使用Scala從MongoDB獲取_id

試圖獲取如下所示的ID,但不返回正確的結果。

private def getModelRunId(): List[String] = { 
    val resultsCursor: List[DBObject] = 
    modelRunResultsCollection.find(MongoDBObject.empty, MongoDBObject(FIELD_ID -> 1)).toList 
    println("resultsCursor >>>>>>>>>>>>>>>>>> " + resultsCursor) 
    resultsCursor.map(x => (Json.parse(x.toString()) \ FIELD_ID).asOpt[String]).flatten 
} 
{ 
"_id": ObjectId("5269723bd516ec3a69f3639e"), 
"modelRunId": ObjectId("5269723ad516ec3a69f3639d"), 
"results": [ 
{ 
    "ClaimId": "526971f5b5b8b9148404623a", 
    "pricingResult": { 
    "TxId": 0, 
    "ClaimId": "Large_Batch_1", 
    "Errors": [ 

    ], 
    "Disposition": [ 
     { 
     "GroupId": 1, 
     "PriceAmt": 20, 
     "Status": "Priced Successfully", 
     "ReasonCode": 0, 
     "Reason": "RmbModel(PAM_DC_1):ProgramNode(Validation CPG):ServiceGroupNode(Medical Services):RmbTerm(RT)", 
     "PricingMethodologyId": 2, 
     "Lines": [ 
      { 
      "Id": 1 
      } 
     ] 
     } 
    ] 
    } 
}, 
+0

你和你當前的代碼得到什麼錯誤?你正在使用哪個驅動程序? – Jean

回答

2

我想你正在使用卡斯巴,斯卡拉官方驅動。

你只需要修改地圖功能:

resultsCursor.map { x => x.as[org.bson.types.ObjectId](FIELD_ID)} 

卡斯巴做反序列化BSON從的Scala對象,所以你不必自己做!

3

如果你想找到對象ID的:

import com.mongodb.casbah.Imports._ 
collection.find(MongoDBObject(/*query*/)).map(_._id) 

如果你想通過編號來查詢:

collection.findOneByID(/*id*/)