mongohadoop支持替换文档吗?

ubbxdtey  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(305)

我正在使用spark中的mongo-hadoop(mongo-hadoop-core-1.4.2.jar&mongo-java-driver-3.2.1.jar)替换mongodb中的文档(不是用$set更新):

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);

但我想替换整个文件。

xtfmy6hx

xtfmy6hx1#

更新:
mongohadoop增加了对替换2.0.0-rc0中文档的支持。从那时起,要完全替换文档,必须使用

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

注意:不能使用替换和 multiUpdate = true 同时,替换也不会改变 _id 值-请参见完全替换文档:
这个 update() 方法不替换 _id 价值观。
... update() 无法更新多个文档。
看看代码,这似乎是不可能的: MongoOutputCommitter 总是发出更新命令(只能包含 $operators )-参见mongooutputcommitter.java第155行及以下内容。他们使用 BulkUpdateRequestBuilderupdate / updateOne 方法,但要发出replace命令,它们需要使用 replaceOne 方法。
所以,没有这样的特征。也许你会提出一个请求:)

相关问题