0

簡単な解決策があるはずだと思いますが、見つけることができませんでした。

Scala で以下を使用して、MongoDB からデータへのアクセスを開始します。

val search = MongoDBObject("_id" -> new ObjectId("xxx"))
val fields = MongoDBObject("community.member.name" -> 1, "community.member.age" -> 1)

for (res <- mongoColl.find(search, fields)) {
    var memberInfo = res.getAs[BasicDBObject]("community").get
    println(memberInfo)
}

結果として BasicDBObject を取得します。

{
"member" : [
    {
        "name" : "John Doe",
        "age" : "32",
    },{
        "name" : "Jane Doe",
        "age" : "29",
    },
    ...
]
}

getAs[String] で値にアクセスできることはわかっていますが、これはここでは機能していません...誰かアイデアがありますか? 解決策を数時間探しています...

4

4 に答える 4

2

複雑なMongoDBオブジェクトを操作する場合は、単純なケースクラスのシリアル化を提供するSalatを使用できます。
データのサンプル:

case class Community(members:Seq[Member], _id: ObjectId = new ObjectId)

case class Member(name:String, age:Int)

val mongoColl: MongoCollection = _

val dao = new SalatDAO[Community, ObjectId](mongoColl) {}

val community = Community(Seq(Member("John Doe", 32), Member("Jane Doe", 29)))
dao.save(community)

for {
    c <- dao.findOneById(community._id)
    m <- c.members
} println("%s (%s)" format (m.name, m.age))
于 2013-03-15T07:00:39.647 に答える
0

やってみるべきだと思います

val member = memberInfo.as[MongoDBList]("member").as[BasicDBObject](0)
println(member("name"))
于 2013-03-15T06:50:04.027 に答える
0

この問題は実際には MongoDB ではなく、データ構造に関係しています。JSON/BSON データ構造には以下が含まれます

  • を含むオブジェクト コミュニティ
    • メンバーの配列
      • 各メンバーには name または age というプロパティがあります。

あなたの問題は、次のものと完全に同等です。

case class Community(members:List[Member])

case class Member(name:String, age:Int)

val a = List(member1,member2)

// a.name does not compile, name is a property defined on a member, not on the list
于 2013-03-15T08:17:20.107 に答える