java mongodb upsert_java – MongoDb upsert exception无效的BSON字段

这个例外:

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”?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值