如何在java中用mongodb实现批量updateOne

如何在java中用mongodb实现批量updateOne,java,mongodb,spring-boot,mongotemplate,bulkupdate,Java,Mongodb,Spring Boot,Mongotemplate,Bulkupdate,我正在尝试实现对象列表的批量更新。但是我得到了以下错误 java.lang.IllegalArgumentException: Invalid BSON field name bookingId at org.bson.AbstractBsonWriter.writeName(AbstractBsonWriter.java:532) at org.bson.codecs.BsonDocumentCodec.encode(BsonDocumentCodec.java:114) at org.bso

我正在尝试实现对象列表的批量更新。但是我得到了以下错误

java.lang.IllegalArgumentException: Invalid BSON field name bookingId
at org.bson.AbstractBsonWriter.writeName(AbstractBsonWriter.java:532)
at org.bson.codecs.BsonDocumentCodec.encode(BsonDocumentCodec.java:114)
at org.bson.codecs.BsonDocumentCodec.encode(BsonDocumentCodec.java:41)
at org.bson.codecs.BsonDocumentWrapperCodec.encode(BsonDocumentWrapperCodec.java:60)
at org.bson.codecs.BsonDocumentWrapperCodec.encode(BsonDocumentWrapperCodec.java:29)
at com.mongodb.operation.BulkWriteBatch$WriteRequestEncoder.encode(BulkWriteBatch.java:398)
at com.mongodb.operation.BulkWriteBatch$WriteRequestEncoder.encode(BulkWriteBatch.java:377)
at org.bson.codecs.BsonDocumentWrapperCodec.encode(BsonDocumentWrapperCodec.java:63)
at org.bson.codecs.BsonDocumentWrapperCodec.encode(BsonDocumentWrapperCodec.java:29)
更新的实施情况如下:

public void _deleteAll( ArrayList<T> pojos ) {
    Assert.notNull( pojos, "Entity must not be null!" );
    BulkOperations ops = mongoTemplate.bulkOps( BulkOperations.BulkMode.ORDERED, className, collectionName );


    for ( T pojo : pojos ) {
        System.out.println( ( ( BaseEntity ) pojo ).get_id() );
        ( ( BaseEntity ) pojo ).setIsDeleted( true );
        Query query = new Query( Criteria.where( "_id" ).is( ( ( BaseEntity ) pojo ).get_id() ) );
        Document document = Document.parse( pojo.toString() ); //toString() returns JSON string
        Update update = Update.fromDocument( document );
        ops.updateOne( query, update );
    }
    ops.execute();
}
JSON数据与此类似:

{
    "_id" : ObjectId("5d81d87ac290c518433e66d9"),
    "bookingId" : 100344391,
    "body" : "{\"title\”:\"Some title\”,\”booking_room_id\":null,\”message\”:\"some message\”}",
    “nestedObject" : {
        “someKey" : “some value"
    },
    "created_at" : ISODate("2019-09-18T07:10:50.067Z"),
    "updated_at" : ISODate("2019-09-18T07:28:16.062Z"),
    "isDeleted" : false,
    "_class" : "com.test.mongo_test.entity.mongo.SomePojo"
}
找到了答案。基本上我要做的就是在文档中添加查询命令
$set

writes.add(
    new UpdateOneModel<>(
        new Document( "_id", new ObjectId( id ) ),
        new Document( "$set", Document.parse( pojo.toString() ) )
    )
);
writes.add(
新的UpdateModel(
新文档(“_id”,新ObjectId(id)),
新文档(“$set”,Document.parse(pojo.toString()))
)
);
writes.add(
    new UpdateOneModel<>(
        new Document( "_id", new ObjectId( id ) ),
        new Document( "$set", Document.parse( pojo.toString() ) )
    )
);