我正在使用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);
但我想替换整个文件。
1条答案
按热度按时间xtfmy6hx1#
更新:
mongohadoop增加了对替换2.0.0-rc0中文档的支持。从那时起,要完全替换文档,必须使用
注意:不能使用替换和
multiUpdate = true
同时,替换也不会改变_id
值-请参见完全替换文档:这个
update()
方法不替换_id
价值观。...
update()
无法更新多个文档。看看代码,这似乎是不可能的:
MongoOutputCommitter
总是发出更新命令(只能包含$operators
)-参见mongooutputcommitter.java第155行及以下内容。他们使用BulkUpdateRequestBuilder
的update
/updateOne
方法,但要发出replace命令,它们需要使用replaceOne
方法。所以,没有这样的特征。也许你会提出一个请求:)