mongo-hadoop是否支持替换文档?

时间:2016-02-23 14:06:19

标签: java mongodb hadoop

我试图在Spark中使用mongo-hadoop替换MongoDB中的文件(不是用$ set更新)(mongo-hadoop-core-1.4.2.jar& mongo-java-driver-3.2.1 .jar):

BasicDBObject query = new BasicDBObject();
query.append("_id", 6972);

BasicDBObject update = new BasicDBObject();
update.append("_id", 6988);
update.append("f1", "ACTIVE_USER");

然后我写了这样的话:

new MongoUpdateWritable(query, update, false, true);

但这失败了:

Caused by: java.lang.IllegalArgumentException: Invalid BSON field name f1

我能做到:

new MongoUpdateWritable(query, new BasicDBObject("$set", update), false, true);

但我想替换整个文件。

1 个答案:

答案 0 :(得分:1)

<强>更新
mongo-hadoop added support用于替换2.0.0-rc0中的文档。从那时起,要完全替换文档,您必须使用

new MongoUpdateWritable(query, update, false/*or true*/, false, true)

注意:您不能同时使用替换和multiUpdate = true,替换也不会更改_id值 - 请参阅Replace a Document Entirely

  

update()方法不会替换_id值   ...
  update() 无法更新多个文档。

查看代码,似乎无法实现:MongoOutputCommitter始终发出更新命令(只能包含$operators) - 请参阅MongoOutputCommitter.java line 155以下。他们使用BulkUpdateRequestBuilder的{​​{1}} / update方法,但要发出替换命令,他们需要使用updateOne方法。
所以,没有这样的功能。
也许你会提出拉动请求:)