【问题标题】:Update an existing collection in MongoDB using Java-Hadoop connector使用 Java-Hadoop 连接器更新 MongoDB 中的现有集合
【发布时间】:2012-05-30 13:25:44
【问题描述】:

是否可以用新数据更新现有的 MongoDB 集合。我正在使用 hadoop 作业向 Mongo 读取写入数据。所需的场景是: - 说 Mongo 的第一个集合是

{ 
  "_id" : 1,
  "value" : "aaa"
  "value2" : null
}

从 Mongo 读取数据并处理数据后,MongoDB 应该包含

{ 
  "_id" : 1,
  "value" : "aaa"
  "value2" : "bbb"
}

如果可能,请提供一些虚拟代码。

【问题讨论】:

  • 你不能使用 $set basicDBObject 的简单更新吗?

标签: java mongodb hadoop mapreduce mongodb-hadoop


【解决方案1】:
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 个参数是在一个集合中的多个文档中进行多次更新。

在驱动类中设置 job.setOutputValueClass(MongoUpdateWritable.class);

【讨论】:

    【解决方案2】:

    我已经通过扩展org.apache.hadoop.mapreduce.RecordWriter 并覆盖这个类的 write 方法来做到这一点。

    【讨论】:

      【解决方案3】:

      Mongo-Hadoop 连接器当前不支持此功能。如果您愿意,可以在MongoDB Jira 中打开功能请求。

      【讨论】:

        【解决方案4】:

        我已经通过stratio完成了,如果你使用的是spark,你可以看看!

        【讨论】:

          猜你喜欢
          • 2014-12-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-29
          • 2018-02-03
          • 1970-01-01
          相关资源
          最近更新 更多