我试图在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);
但我想替换整个文件。
答案 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
方法。
所以,没有这样的功能。