Java 获取子文档mongodb中数组的值
我正在使用Java 获取子文档mongodb中数组的值,java,mongodb,hadoop,Java,Mongodb,Hadoop,我正在使用Hadoop开发一个应用程序来处理存储在mongoDB中的一些数据。我正在用java编写程序 问题是我有一个子文档,它包含一个数组,我想取数组的一个属性的值。我将举一个例子来更清楚地看到这一点 "entities" : { "hashtags" : [ { "**text**" : "whatever", "i
Hadoop
开发一个应用程序来处理存储在mongoDB
中的一些数据。我正在用java
编写程序
问题是我有一个子文档,它包含一个数组,我想取数组的一个属性的值。我将举一个例子来更清楚地看到这一点
"entities" : {
"hashtags" : [
{
"**text**" : "whatever",
"indices" : [
59,
69
]
},
{
"**text**" : "whatever",
"indices" : [
82,
95
]
}
],
"urls" : [ ],
"user_mentions" : [ ]
},
文本的值就是我要处理的值
因此,我用Java开发了一个程序,它在mapper类中报告了以下错误:
java.lang.ClassCastException: com.mongodb.BasicDBObject cannot be cast to java.lang.String
at HashTagsMapper.map(HashTagsMapper.java:27)
at HashTagsMapper.map(HashTagsMapper.java:18)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121)
at org.apache.hadoop.mapred.Child.main(Child.java:249)
这是映射器类-->
公共类HashTagsMapper扩展映射器
{
公共void映射(对象键、BSONObject值、上下文上下文)引发IOException、InterruptedException
{
ArrayList name=新的ArrayList();
BSONObject实体=(BSONObject)value.get(“实体”);
BasicDBList hashtags=(BasicDBList)entities.get(“hashtags”);
对于(int index=0;index
有人能帮我吗?谢谢!问题是类强制转换异常。为什么不尝试编写一个
(String)hashtags.get(index)
,但是
问题可能是basicDbList是BDBO对象的列表,您无法将父对象强制转换为子对象。问题正是异常所说的-从
hashtags.get(index)返回的对象
不是一个字符串,它是一个。这与您在文档中显示的内容相匹配-哈希标记是一个对象数组,它依次包含键文本和索引。投票关闭,因为这是询问者的一个简单误解,对未来的读者来说不太可能有用。
(String)hashtags.get(index)
hashtags.get(index).toString()