是否有更简洁的方法来迭代Fantom中的Mongo查询结果?

时间:2014-08-14 23:25:37

标签: mongodb fantom

我正在Fantom language中编写一个Web应用程序,并使用afMongo来访问Mongo数据库实例。按照afMongo文档中的示例,我得到了我需要迭代的查询结果。在一个简化的例子中,迭代看起来像这样

    class MapListIterator {
      Void main(){
        [Str:Obj?][] listOfMaps := [,]
        listOfMaps.add(
          ["12345":[
             "id":12345,
             "code":"AU",
             "name":"Australia"
          ]])

        listOfMaps.each |Str:Obj? map| {
          echo(map.keys)
          keys := map.keys
          keys.each {
            echo(it)
            echo(((Str:Obj?)map[it])["code"])
            echo(((Str:Obj?)map[it])["name"])
          }
        }
      }
    }

我在Fantom online playground中运行了这段代码并且它运行正常,但我想知道它是否是一种更简洁的迭代结果的方法。我不喜欢上面代码中的转换。另外,有没有更好的方法来编写嵌套的it-block?

修改

事实证明我过于复杂。这是应用史蒂夫建议后代码的样子:

Str:Country mapOfCountries := [:]
mapOfCountries.ordered = true

listOfMaps := ([Str:Str?][]) collection.findAll
listOfMaps.each {
  c := it["code"]
  n := it["name"]
  mapOfCountries.add(c, Country { code = c ; name = n })
}

1 个答案:

答案 0 :(得分:1)

我会重新投射结果并在早期分配地图......这给出了:

listOfMappedMaps := ([Str:[Str:Obj?]][]) listOfMaps

listOfMappedMaps.each {
    map := it
    map.keys.each {
        echo(map[it]["code"])
        echo(map[it]["name"])
    }
}

下一步是使用Morphia,它允许您使用对象代替地图。