Java BulkOperations向上插入引发无效的BSON字段名
这是我的java代码Java BulkOperations向上插入引发无效的BSON字段名,java,mongodb,spring-boot,Java,Mongodb,Spring Boot,这是我的java代码 public void upsertAll(final List<StringEntry> strings) { BulkOperations bulkOps = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, StringEntry.class, DOCUMENT); List<Pair<Query, Update>> operations = new A
public void upsertAll(final List<StringEntry> strings) {
BulkOperations bulkOps = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, StringEntry.class, DOCUMENT);
List<Pair<Query, Update>> operations = new ArrayList<>();
strings.forEach(string -> {
Query query = new Query();
query.addCriteria(Criteria.where("msgid").is(string.getMsgId()));
Document doc = new Document();
mongoTemplate.getConverter().write(string, doc);
Update update = Update.fromDocument(doc);
bulkOps.upsert(query, update);
});
bulkOps.execute();
}
如何使批量upsert函数工作?在查看了库的源代码和测试之后,我成功地解决了我的问题
public void upsertAll(最终列表字符串){
FindAndReplaceOptions=FindAndReplaceOptions.options();
BulkOperations bulkOps=mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED,StringEntry.class,DOCUMENT);
列表操作=新建ArrayList();
for(StringEntry字符串:字符串){
查询=新查询();
query.addCriteria(Criteria.where(“msgid”).is(string.getMsgId());
单据单据=新单据();
mongoTemplate.getConverter().write(字符串,文档);
bulkOps=bulkOps.replaceOne(查询、文档、选项.upsert());
}
bulkOps.execute();
}
upsert
功能似乎没有真正按预期工作。将其替换为replaceOne
有效。文档说明了什么是正确的用法?我找不到任何关于用法的文档。
java.lang.IllegalArgumentException: Invalid BSON field name msgid
at org.bson.AbstractBsonWriter.writeName(AbstractBsonWriter.java:534)
at com.mongodb.internal.connection.BsonWriterDecorator.writeName(BsonWriterDecorator.java:193)
at org.bson.codecs.DocumentCodec.writeMap(DocumentCodec.java:211)
at org.bson.codecs.DocumentCodec.encode(DocumentCodec.java:154)
at org.bson.codecs.DocumentCodec.encode(DocumentCodec.java:45)
at org.bson.codecs.BsonDocumentWrapperCodec.encode(BsonDocumentWrapperCodec.java:63)
at org.bson.codecs.BsonDocumentWrapperCodec.encode(BsonDocumentWrapperCodec.java:29)
at com.mongodb.internal.connection.SplittablePayload$WriteRequestEncoder.encode(SplittablePayload.java:221)
at com.mongodb.internal.connection.SplittablePayload$WriteRequestEncoder.encode(SplittablePayload.java:187)
public void upsertAll(final List<StringEntry> strings) {
FindAndReplaceOptions options = FindAndReplaceOptions.options();
BulkOperations bulkOps = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, StringEntry.class, DOCUMENT);
List<Pair<Query, Update>> operations = new ArrayList<>();
for(StringEntry string: strings) {
Query query = new Query();
query.addCriteria(Criteria.where("msgid").is(string.getMsgId()));
Document doc = new Document();
mongoTemplate.getConverter().write(string, doc);
bulkOps = bulkOps.replaceOne(query, doc, options.upsert());
}
bulkOps.execute();
}