我有一个类似JSON的scala对象,包含以下任何递归集合:scala.collection.Map [String,Any],scala.collection.Seq [Any],以及基本类型:Int,Float,String,Double ,Long,我通过网络API收到的。
如果我尝试直接将此对象喷射到mongodb(例如使用插入),则如果对象是非集合类型的映射[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)
...