【发布时间】:2021-01-13 21:30:49
【问题描述】:
这是我的java代码
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();
}
堆栈跟踪异常。
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)
如何让批量 upsert 功能起作用?
【问题讨论】:
-
文档中说的正确用法是什么?
-
我找不到任何关于使用的文档。
标签: java mongodb spring-boot