2013-10-15 5 views
0

Как я могу рекурсивно добавить к DBObject в Casbah, а затем вернуть один MongoDBObject с каждым добавленным элементом списка?Рекурсивно построить MongoDBObject

Обратите внимание, что ниже не компилировать или работать, но он намерен показать нужный мне код

def foo(pairs: List[(String, Int)]): List[MongoDBObject] = { 
    def go(ps: List[(String, Int)], acc: List[MongoDBObject]): List[MongoDBObject] = 
     ps match { 
     case x :: xs if(x._1 == "BAD") => go(xs, acc) 
     case x :: xs => go(xs, MongoDBObject(x._1 -> x._2) :+ acc) /* error line */ 
     case Nil => acc 
    } 
} 

val pairsList: List[MongoDBObject] = foo(getPairs()) // assume getPairs() is defined 
val builder = // do something to convert pairsList -> MongoDBObject (maybe a fold?) 
val results = collection.find(builder) 

Когда я пытался что-то вроде выше, я увидел следующее время компиляции ошибка в моем втором случае заявление ,

[myApp] $ compile 
[info] Compiling 1 Scala source to ... 
[error] c:\development\myApp\Test.scala:85: overloaded method value apply with alternatives: 
[error] [A(in method apply)(in method apply)(in method apply)(in method apply)(in method apply)(in method apply)(in method apply)(in method apply) < 
: String, B(in method apply)(in method apply)(in method apply)(in method apply)(in method apply)(in method apply)(in method apply)(in method apply)](e 
lems: List[(A(in method apply)(in method apply)(in method apply)(in method apply)(in method apply)(in method apply)(in method apply)(in method apply), 
B(in method apply)(in method apply)(in method apply)(in method apply)(in method apply)(in method apply)(in method apply)(in method apply))])com.mongo 
db.casbah.commons.Imports.DBObject <and> 
[error] [A(in method apply)(in method apply)(in method apply)(in method apply)(in method apply)(in method apply)(in method apply)(in method apply) < 
: String, B(in method apply)(in method apply)(in method apply)(in method apply)(in method apply)(in method apply)(in method apply)(in method apply)](e 
lems: (A(in method apply)(in method apply)(in method apply)(in method apply)(in method apply)(in method apply)(in method apply)(in method apply), B(in 
method apply)(in method apply)(in method apply)(in method apply)(in method apply)(in method apply)(in method apply)(in method apply))*)com.mongodb.ca 
sbah.commons.Imports.DBObject 
[error] cannot be applied to (com.mongodb.casbah.query.Imports.DBObject with com.mongodb.casbah.query.dsl.QueryExpressionObject) 
[error] go(xs, acc :+ MongoDBObject(elemMatch)) 
[error]                    ^
[error] one error found 

ответ

2

Если вы хотите добавить новый объект в список этого следует сделать это:

MongoDBObject(x._1 -> x._2) :: acc 
+0

В моем случае, я попытался 'идти (хз, MongoDBObject (elemMatch) :: РДЦ)', но я получил ту же ошибку выше. «ElemMatch» действителен, так как вы помогли мне создать его раньше. –

+0

'MongoDBObject (" a "->" b ") :: List (MongoDBObject (" c "->" d "))' работает для меня. Возможно, потребуется некоторое разъяснение. – Ross