这个例外:
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)
由以下代码抛出:
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.
_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/