是否可以使用新数据更新现有的 MongoDB 集合。我正在使用 hadoop 作业向 Mongo 读取写入数据。所需的场景是:-说 Mongo 中的第一个集合是
{
"_id" : 1,
"value" : "aaa"
"value2" : null
}
从 Mongo 读取数据并处理数据后,MongoDB 应该包含
{
"_id" : 1,
"value" : "aaa"
"value2" : "bbb"
}
如果可能,请提供一些虚拟代码。
是否可以使用新数据更新现有的 MongoDB 集合。我正在使用 hadoop 作业向 Mongo 读取写入数据。所需的场景是:-说 Mongo 中的第一个集合是
{
"_id" : 1,
"value" : "aaa"
"value2" : null
}
从 Mongo 读取数据并处理数据后,MongoDB 应该包含
{
"_id" : 1,
"value" : "aaa"
"value2" : "bbb"
}
如果可能,请提供一些虚拟代码。
BasicBSONObject query=new BasicBSONObject();
query.append("fieldname", value);
BasicBSONObject update=new BasicBSONObject();
update.append("$set", new BasicBSONObject().append("newfield",value));
MongoUpdateWritable muw=new MongoUpdateWritable(query,update,false,true);
contex.write(key, muw);
查询:用于提供条件(匹配条件)。
update:用于在现有集合中添加新字段和值。
MongoUpdateWritable : 第三个参数是 upsert 值(与 mongodb 相同)
第 4 个参数是集合中多个文档的多次更新。
在 Driver 类中设置
job.setOutputValueClass(MongoUpdateWritable.class);
我通过扩展org.apache.hadoop.mapreduce.RecordWriter
和覆盖这个类的 write 方法来做到这一点。
Mongo-Hadoop 连接器当前不支持此功能。如果您愿意,可以在MongoDB Jira中打开功能请求。
我是通过stratio做的,如果你用的是spark,你可以看看!