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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用Java将JSON文档数组插入MongoDB时,你需要使用BSON工具将JSON转换为BSON格式。以下是一个示例代码,可以将JSON数组插入到MongoDB中: ``` import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import org.bson.Document; import org.bson.conversions.Bson; import org.bson.types.ObjectId; import java.util.ArrayList; import java.util.List; public class MongoDBTest { public static void main(String[] args) { // 创建MongoDB连接 MongoClient client = new MongoClient("localhost", 27017); // 获取MongoDB数据库 MongoDatabase database = client.getDatabase("test"); // 获取MongoDB集合 MongoCollection<Document> collection = database.getCollection("users"); // 创建JSON数组 String json = "[{ \"name\" : \"Tom\", \"age\" : 20 },{ \"name\" : \"Jerry\", \"age\" : 25 }]"; // 将JSON数组转换为BSON文档列表 List<Document> documents = new ArrayList<>(); JsonParser parser = new JsonParser(); JsonArray jsonArray = parser.parse(json).getAsJsonArray(); for (JsonElement jsonElement : jsonArray) { Document document = Document.parse(jsonElement.toString()); documents.add(document); } // 插入BSON文档列表到MongoDB集合 collection.insertMany(documents); // 关闭MongoDB连接 client.close(); } } ``` 在这个示例中,我们使用了JsonParser将JSON字符串转换为JsonArray,然后遍历JsonArray,将每个元素转换为BSON文档,并将文档添加到BSON文档列表中。最后,我们使用insertMany方法将BSON文档列表插入到MongoDB集合中。注意,在使用BSON工具时,需要注意BSON格式与JSON格式的差异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值