Rit*_*ngi 7 java mongodb nosql
我无法从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)
任何帮助,将不胜感激.谢谢!
Wir*_*rie 12
没有办法像你正在使用Java驱动程序链接一个属性名称(get肯定是这样,根据这个,put它也不应该工作).
您需要像建议的那样一次获取一个对象.
((DBObject)obj.get("response")).get("resData")
Run Code Online (Sandbox Code Playgroud)
请参阅此处了解可能的未来功能,该功能将允许您的语法可行(尽管可能使用新的方法名称).
小智 8
我遇到了同样的问题,我写了一个小函数来获取链接属性.
private Object getFieldFromCursor(DBObject o, String fieldName) {
final String[] fieldParts = StringUtils.split(fieldName, '.');
int i = 1;
Object val = o.get(fieldParts[0]);
while(i < fieldParts.length && val instanceof DBObject) {
val = ((DBObject)val).get(fieldParts[i]);
i++;
}
return val;
}
Run Code Online (Sandbox Code Playgroud)
我希望它有所帮助.
| 归档时间: |
|
| 查看次数: |
19803 次 |
| 最近记录: |