小编Rit*_*ngi的帖子

MongoDB从BasicDBObject(Java)中提取值

我无法从MongoDB中查询的文档中检索值.

例如,doc结构如下:

    {
        "_id": {
            "$oid": "50f93b74f9eccc540b302462"
        },
       "response": {
            "result": {
                "code": "1000",
                "msg": "Command completed successfully"
            },
            "resData": {
                "domain:infData": {
                    "domain:name": "ritesh.com",
                    "domain:crDate": "2007-06-15T12:02:36.0000Z",
                    "domain:exDate": "2013-06-15T12:02:36.0000Z"
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

查询代码是:

    DBCollection collection = db.getCollection("domains");

    BasicDBObject p = new BasicDBObject("response.resData.domain:infData.domain:name", "ritesh.com");
    DBCursor c = collection.find(p);

    while(c.hasNext()) {
        DBObject obj = c.next();
        Object value = obj.get("response.resData.domain:infData.domain:name");
    }
Run Code Online (Sandbox Code Playgroud)

它查询正常并获取文档,但我似乎无法弄清楚如何提取"response.resData.domain:infData.domain:name"的值或其他类似嵌套的值来自DBObject(或自从c开始的BasicDBObject). next()返回类型BasicDBObject).

我可以一次一个地获取对象,如:

    ((DBObject)obj.get("response")).get("resData")....
Run Code Online (Sandbox Code Playgroud)

但这似乎非常麻烦.

我想因为你可以把()一个嵌套的字段值放在BasicDBObject中,如:

    basicDBObject.put("response.resData.domain:infData.domain:name", "ritesh.com");
Run Code Online (Sandbox Code Playgroud)

我可以类似地使用get()从使用相同类型的键的BasicDBObject结果中获取.就像我试图在上面的代码中做的那样:

    Object value = obj.get("response.resData.domain:infData.domain:name");
Run Code Online (Sandbox Code Playgroud)

但那是返回一个空值.

这可能是直截了当的,但我似乎无法弄明白.在网上检查的每个地方,示例只从结果中获取未嵌套的值.喜欢

    doc.get("name");
Run Code Online (Sandbox Code Playgroud)

而不是像:

    doc.get("name.lastname.clanname");
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.谢谢!

java mongodb nosql

7
推荐指数
2
解决办法
2万
查看次数

标签 统计

java ×1

mongodb ×1

nosql ×1