java – MongoDb upsert exception无效的BSON字段

前端之家收集整理的这篇文章主要介绍了java – MongoDb upsert exception无效的BSON字段前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_404_0@
这个例外: @H_403_2@Exception in thread "Thread-1" java.lang.IllegalArgumentException: Invalid BSON field name id at org.bson.AbstractBsonWriter.writeName(AbstractBsonWriter.java:516) at org.bson.codecs.DocumentCodec.writeMap(DocumentCodec.java:188) at org.bson.codecs.DocumentCodec.encode(DocumentCodec.java:131) 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.connection.UpdateCommandMessage.writeTheWrites(UpdateCommandMessage.java:85) at com.mongodb.connection.UpdateCommandMessage.writeTheWrites(UpdateCommandMessage.java:43) at com.mongodb.connection.BaseWriteCommandMessage.encodeMessageBodyWithMetadata(BaseWriteCommandMessage.java:129) at com.mongodb.connection.RequestMessage.encodeWithMetadata(RequestMessage.java:160) at com.mongodb.connection.WriteCommandProtocol.sendMessage(WriteCommandProtocol.java:220) at com.mongodb.connection.WriteCommandProtocol.execute(WriteCommandProtocol.java:101) at com.mongodb.connection.UpdateCommandProtocol.execute(UpdateCommandProtocol.java:64) at com.mongodb.connection.UpdateCommandProtocol.execute(UpdateCommandProtocol.java:37) at com.mongodb.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:168) at com.mongodb.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:289) at com.mongodb.connection.DefaultServerConnection.updateCommand(DefaultServerConnection.java:143) at com.mongodb.operation.MixedBulkWriteOperation$Run$3.executeWriteCommandProtocol(MixedBulkWriteOperation.java:490) at com.mongodb.operation.MixedBulkWriteOperation$Run$RunExecutor.execute(MixedBulkWriteOperation.java:656) at com.mongodb.operation.MixedBulkWriteOperation$Run.execute(MixedBulkWriteOperation.java:409) at com.mongodb.operation.MixedBulkWriteOperation$1.call(MixedBulkWriteOperation.java:177) at com.mongodb.operation.MixedBulkWriteOperation$1.call(MixedBulkWriteOperation.java:168) at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:422) at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:413) at com.mongodb.operation.MixedBulkWriteOperation.execute(MixedBulkWriteOperation.java:168) at com.mongodb.operation.MixedBulkWriteOperation.execute(MixedBulkWriteOperation.java:74) at com.mongodb.Mongo.execute(Mongo.java:845) at com.mongodb.Mongo$2.execute(Mongo.java:828) at com.mongodb.MongoCollectionImpl.executeSingleWriteRequest(MongoCollectionImpl.java:550) at com.mongodb.MongoCollectionImpl.update(MongoCollectionImpl.java:542) at com.mongodb.MongoCollectionImpl.updateOne(MongoCollectionImpl.java:381) at org.hpms.gis.MongoDbTest.insert(MongoDbTest.java:63) at java.lang.Thread.run(Thread.java:748)

由以下代码抛出:

@H_403_2@final UUID id = UUID.randomUUID(); final double frequency = 8_000.0 + ( 10_000.0 * Math.random() ); final double startSec = 100*i; final double startNano = 10*i; final double endSec = startSec + ( 100*i ); final double endNano = startNano + ( 10*i ); final double latitude = ( 180.0*Math.random() ) - 90.0; final double longitude = ( 360.0*Math.random() ) - 180.0; final Document trackID = new Document( "id",new Document( "msb",id.getMostSignificantBits ()) .append( "lsb",id.getLeastSignificantBits())); final Document track = new Document( "id",id.getLeastSignificantBits())).append( "frequency",frequency ) .append( "start",new Document( "seconds",startSec ) .append( "nanoSec",startNano )).append( "end",endSec ) .append( "nanoSec",endNano )).append( "position",new Document( "latitude",latitude ) .append( "longitude",longitude )).append( "padding",new byte[1000-8-8-8-4-4-4-4-8-8] ); //_collection.insertOne( track ); _collection.updateOne( trackID,track,new UpdateOptions().upsert( true ));

注释代码_collection.insertOne(track);执行得很好.

为什么插入没有“upsert”?

解决方法

updateOne用于使用更新运算符更新文档字段.您需要替换文档的replaceOne. @H_403_2@_collection.replaceOne( trackID,new UpdateOptions().upsert( true ));

更多这里

更新运算符:https://docs.mongodb.com/manual/reference/operator/update-field/

更新一:https://docs.mongodb.com/manual/reference/method/db.collection.updateOne/

替换一个:https://docs.mongodb.com/manual/reference/method/db.collection.replaceOne/

猜你在找的Java相关文章