先贴一段报错 java.lang.IllegalArgumentException: Invalid BSON field name creaImpcntat org.bson.AbstractBsonWriter.writeName(AbstractBsonWriter.java:494)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:84)at com.mongodb.connection.UpdateCommandMessage.writeTheWrites(UpdateCommandMessage.java:42)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:212)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.DefaultServerDefaultServerProtocolExecutor.execute(DefaultServer.java:159)atcom.mongodb.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:286)atcom.mongodb.connection.DefaultServerConnection.updateCommand(DefaultServerConnection.java:140)atcom.mongodb.operation.MixedBulkWriteOperationDefaultServerProtocolExecutor.execute(DefaultServer.java:159)at com.mongodb.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:286)at com.mongodb.connection.DefaultServerConnection.updateCommand(DefaultServerConnection.java:140)at com.mongodb.operation.MixedBulkWriteOperationDefaultServerProtocolExecutor.execute(DefaultServer.java:159)atcom.mongodb.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:286)atcom.mongodb.connection.DefaultServerConnection.updateCommand(DefaultServerConnection.java:140)atcom.mongodb.operation.MixedBulkWriteOperationRun3.executeWriteCommandProtocol(MixedBulkWriteOperation.java:480)atcom.mongodb.operation.MixedBulkWriteOperation3.executeWriteCommandProtocol(MixedBulkWriteOperation.java:480)at com.mongodb.operation.MixedBulkWriteOperation3.executeWriteCommandProtocol(MixedBulkWriteOperation.java:480)atcom.mongodb.operation.MixedBulkWriteOperationRunRunExecutor.execute(MixedBulkWriteOperation.java:646)atcom.mongodb.operation.MixedBulkWriteOperationRunExecutor.execute(MixedBulkWriteOperation.java:646)at com.mongodb.operation.MixedBulkWriteOperationRunExecutor.execute(MixedBulkWriteOperation.java:646)atcom.mongodb.operation.MixedBulkWriteOperationRun.execute(MixedBulkWriteOperation.java:399)at com.mongodb.operation.MixedBulkWriteOperation$1.call(MixedBulkWriteOperation.java:179)at com.mongodb.operation.MixedBulkWriteOperation$1.call(MixedBulkWriteOperation.java:168)at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:230)at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:221)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:781)at com.mongodb.Mongo2.execute(Mongo.java:764)atcom.mongodb.MongoCollectionImpl.executeSingleWriteRequest(MongoCollectionImpl.java:515)atcom.mongodb.MongoCollectionImpl.update(MongoCollectionImpl.java:508)atcom.mongodb.MongoCollectionImpl.updateOne(MongoCollectionImpl.java:355)atcom.mongodb.MongoCollectionImpl.updateOne(MongoCollectionImpl.java:350)atcom.yeahmobi.bigdata.analysis.dsp.dw.GateWayWinAndImpressStaticsAli2.execute(Mongo.java:764)at com.mongodb.MongoCollectionImpl.executeSingleWriteRequest(MongoCollectionImpl.java:515)at com.mongodb.MongoCollectionImpl.update(MongoCollectionImpl.java:508)at com.mongodb.MongoCollectionImpl.updateOne(MongoCollectionImpl.java:355)at com.mongodb.MongoCollectionImpl.updateOne(MongoCollectionImpl.java:350)at com.yeahmobi.bigdata.analysis.dsp.dw.GateWayWinAndImpressStatics_Ali2.execute(Mongo.java:764)atcom.mongodb.MongoCollectionImpl.executeSingleWriteRequest(MongoCollectionImpl.java:515)atcom.mongodb.MongoCollectionImpl.update(MongoCollectionImpl.java:508)atcom.mongodb.MongoCollectionImpl.updateOne(MongoCollectionImpl.java:355)atcom.mongodb.MongoCollectionImpl.updateOne(MongoCollectionImpl.java:350)atcom.yeahmobi.bigdata.analysis.dsp.dw.GateWayWinAndImpressStaticsAlianonfunanonfunanonfunwriteToMongo111anonfunanonfunanonfunapply1.apply(GateWayWinAndImpressStaticsAli.scala:301)atcom.yeahmobi.bigdata.analysis.dsp.dw.GateWayWinAndImpressStaticsAli1.apply(GateWayWinAndImpressStatics_Ali.scala:301)at com.yeahmobi.bigdata.analysis.dsp.dw.GateWayWinAndImpressStatics_Ali1.apply(GateWayWinAndImpressStaticsAli.scala:301)atcom.yeahmobi.bigdata.analysis.dsp.dw.GateWayWinAndImpressStaticsAlianonfunanonfunanonfunwriteToMongo111anonfunanonfunanonfunapply1.apply(GateWayWinAndImpressStaticsAli.scala:301)atcom.mongodb.spark.MongoConnector1.apply(GateWayWinAndImpressStatics_Ali.scala:301)at com.mongodb.spark.MongoConnector1.apply(GateWayWinAndImpressStaticsAli.scala:301)atcom.mongodb.spark.MongoConnectoranonfunanonfunanonfunwithCollectionDo1.apply(MongoConnector.scala:186)atcom.mongodb.spark.MongoConnector1.apply(MongoConnector.scala:186)at com.mongodb.spark.MongoConnector1.apply(MongoConnector.scala:186)atcom.mongodb.spark.MongoConnectoranonfunanonfunanonfunwithCollectionDo1.apply(MongoConnector.scala:184)atcom.mongodb.spark.MongoConnector1.apply(MongoConnector.scala:184)at com.mongodb.spark.MongoConnector1.apply(MongoConnector.scala:184)atcom.mongodb.spark.MongoConnectoranonfunanonfunanonfunwithDatabaseDo1.apply(MongoConnector.scala:171)atcom.mongodb.spark.MongoConnector1.apply(MongoConnector.scala:171)at com.mongodb.spark.MongoConnector1.apply(MongoConnector.scala:171)atcom.mongodb.spark.MongoConnectoranonfunanonfunanonfunwithDatabaseDo1.apply(MongoConnector.scala:171)atcom.mongodb.spark.MongoConnector.withMongoClientDo(MongoConnector.scala:154)atcom.mongodb.spark.MongoConnector.withDatabaseDo(MongoConnector.scala:171)atcom.mongodb.spark.MongoConnector.withCollectionDo(MongoConnector.scala:184)atcom.yeahmobi.bigdata.analysis.dsp.dw.GateWayWinAndImpressStaticsAli1.apply(MongoConnector.scala:171)at com.mongodb.spark.MongoConnector.withMongoClientDo(MongoConnector.scala:154)at com.mongodb.spark.MongoConnector.withDatabaseDo(MongoConnector.scala:171)at com.mongodb.spark.MongoConnector.withCollectionDo(MongoConnector.scala:184)at com.yeahmobi.bigdata.analysis.dsp.dw.GateWayWinAndImpressStatics_Ali1.apply(MongoConnector.scala:171)atcom.mongodb.spark.MongoConnector.withMongoClientDo(MongoConnector.scala:154)atcom.mongodb.spark.MongoConnector.withDatabaseDo(MongoConnector.scala:171)atcom.mongodb.spark.MongoConnector.withCollectionDo(MongoConnector.scala:184)atcom.yeahmobi.bigdata.analysis.dsp.dw.GateWayWinAndImpressStaticsAlianonfunanonfunanonfunwriteToMongo1.apply(GateWayWinAndImpressStaticsAli.scala:300)atcom.yeahmobi.bigdata.analysis.dsp.dw.GateWayWinAndImpressStaticsAli1.apply(GateWayWinAndImpressStatics_Ali.scala:300)at com.yeahmobi.bigdata.analysis.dsp.dw.GateWayWinAndImpressStatics_Ali1.apply(GateWayWinAndImpressStaticsAli.scala:300)atcom.yeahmobi.bigdata.analysis.dsp.dw.GateWayWinAndImpressStaticsAlianonfunanonfunanonfunwriteToMongo$1.apply(GateWayWinAndImpressStatics_Ali.scala:279)
造成这个原因是用mongoClinet updateone时候没有 加$set
代码如下:
val dateFormat=new SimpleDateFormat("yyyyMMdd")
val ttlTime: Date = dateFormat.parse(updateDate)
finalDf.rdd.repartition(100).foreach(itm => {
var bsons = new util.ArrayList[Bson]()
bsons.add(Filters.eq("app",itm(0)))
bsons.add(Filters.eq("day",itm(1)))
bsons.add(Filters.eq("hour",itm(2)))
bsons.add(Filters.eq("adx",itm(3)))
bsons.add(Filters.eq("os",itm(4)))
bsons.add(Filters.eq("osv",itm(5)))
bsons.add(Filters.eq("impType",itm(6)))
bsons.add(Filters.eq("country",itm(7)))
bsons.add(Filters.eq("updateDate",updateDate))
val InsertOne = new Document("app", itm(0)).append("day", itm(1)).append("hour", itm(2)).append("adx", itm(3))
.append("os", itm(4)).append("osv", itm(5)).append("impType",itm(6)).append("country", itm(7)).append("ttlTime",ttlTime)
mongoConn.withCollectionDo(new WriteConfig(databaseName,
ResultCol, Option(MongoConn)), { col: MongoCollection[Document] => col.updateOne(Filters.and(bsons),InsertOne) })
错误主要在:
mongoConn.withCollectionDo(new WriteConfig(databaseName,
ResultCol, Option(MongoConn)), { col: MongoCollection[Document] => col.updateOne(Filters.and(bsons),InsertOne) })
修改后 给InsertOne加上$set修改后的代码为
mongoConn.withCollectionDo(new WriteConfig(databaseName,
ResultCol, Option(MongoConn)), { col: MongoCollection[Document] => col.updateOne(Filters.and(bsons),new Document("$set",updateOne),new UpdateOptions().upsert(true)) })
错误解决!
本文解析了在使用MongoDB进行updateOne操作时遇到的java.lang.IllegalArgumentException异常,详细介绍了错误原因及修复方法,强调了在更新文档时正确使用$set操作符的重要性。
3277





