MongoDb upsert异常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", new Document(

"msb", id.getMostSignificantBits ()) .append(

"lsb", id.getLeastSignificantBits())).append(

"frequency", frequency ) .append(

"start", new Document(

"seconds", startSec ) .append(

"nanoSec", startNano )).append(

"end", new Document(

"seconds", 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 );执行正常。

回答:

updateOne使用更新运算符更新文档字段。您需要replaceOne哪个带替换文件。

_collection.replaceOne(

trackID,

track,

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/

以上是 MongoDb upsert异常BSON字段无效 的全部内容, 来源链接: utcz.com/qa/404373.html

回到顶部