在我的測試代碼中,我首先使用MongoTemplate.upsert()執行常規upsert。它正確地將數據添加到數據庫,並在以下文件出現在分貝,正如預期:Spring,MongoDB和upserts:與一對一更新一起工作,在批量更新時失敗
{ "_id" : 1, "elements" : [ { "payload" : "payload" } ] }
我然後使用BulkOperations執行類似的更新插入。它失敗,但有以下例外:
org.bson.codecs.configuration.CodecConfigurationException:無法找到類Element的編解碼器。
我認爲這兩個調用應該具有相同的性能。我在BulkOperations API中丟失了什麼?我怎樣才能讓批量操作以與常規操作相同的方式對對象進行編碼?
我用蒙戈的Java驅動程序3.3.0(類似的問題也可以在2.14.3觀察)
public class Main {
public static void main(String[] args) throws UnknownHostException {
MongoTemplate template = new MongoTemplate(new Mongo("localhost"), "local");
// works
template.upsert(makeQuery(1), makeUpdate(), Data.class);
// fails miserably
BulkOperations ops = template.bulkOps(BulkOperations.BulkMode.UNORDERED, Data.class);
ops.upsert(makeQuery(2), makeUpdate());
ops.execute();
}
private static Query makeQuery(int id) {
return Query.query(Criteria.where("id").is(id));
}
private static Update makeUpdate() {
Update update = new Update();
update.set("elements", Collections.singletonList(new Element()));
return update;
}
}
@Document(collection = "test")
class Data {
private int id = 1;
private List<Element> elements;
}
class Element {
private String payload = "payload";
}