2013-09-27 47 views
2

我有一個類似JSON的scala對象,它由任何遞歸集合組成:scala.collection.Map [String,Any],scala.collection.Seq [任何],以及基本類型:Int,Float,String,Double,Long,這些都是通過Web API接收的。將結構化Map [String,Any]對象插入到mongodb中的快速方法

如果我試圖用(例如插入)直接將這個對象噴射到一個mongodb中,它會在對象是非集合類型的map [String,_]時起作用。但是如果映射值本身就是集合,那麼mongodb驅動程序庫會失去主意並進入無限循環(堆棧溢出)。把這樣一個對象放在MongoDB中的正確方法是什麼?

(有casbah,但看起來主要用於增量構建對象,而不是轉換現有對象)。

這裏是一個失敗的例子:

val obj2= scala.collection.mutable.HashMap[String,Any]() 
obj2 += ("a" -> 123) 

val obj1= scala.collection.mutable.HashMap[String,Any]()  
obj1 += ("x" -> List(obj2))  

val anyMapLike:scala.collection.Map[String,Any] = obj1 
collection.insert(anyMapLike) // Stack overflow here! 

...去香蕉:

java.lang.StackOverflowError: null 
    at scala.collection.convert.Wrappers$MutableMapWrapper.underlying(Wrappers.scala:216) 
    at scala.collection.convert.Wrappers$MutableMapWrapper.productElement(Wrappers.scala:216) 
    at scala.runtime.ScalaRunTime$$anon$1.next(ScalaRunTime.scala:185) 
... 
    at org.bson.BasicBSONEncoder._putObjectField(BasicBSONEncoder.java:234) 
    at org.bson.BasicBSONEncoder.putIterable(BasicBSONEncoder.java:295) 
    at org.bson.BasicBSONEncoder._putObjectField(BasicBSONEncoder.java:234) 
    at org.bson.BasicBSONEncoder.putIterable(BasicBSONEncoder.java:295) 
    at org.bson.BasicBSONEncoder._putObjectField(BasicBSONEncoder.java:234) 
    at org.bson.BasicBSONEncoder.putIterable(BasicBSONEncoder.java:295) 
... 
+0

你能舉一個例子導致問題的地圖嗎? – Ross

+0

很高興。更新了上述內容。 – user48956

回答

0

有導致一個無限循環的錯誤看到轉化可變類型爲MongoDB的一個問題:SCALA-115 - 一個修復將在Casbah的下一個版本中發佈。

相關問題