upsert期间“无效的BSON字段名称”

时间:2017-08-24 11:27:49

标签: java mongodb kotlin mongo-java mongo-java-driver

我正在尝试使用以下代码将数据插入Mongo集合:

clickable

当执行upsert时(上面代码中的最后三行),我得到了 例外val UsersColl = "Users" val UsersColl_AuthProvider = "AuthProvider" val UsersColl_UserId = "UserId" val UsersColl_Active = "Active" val UsersColl_SlackRealName = "SlackRealName" val UsersColl_SlackTeamId = "SlackTeamId" val AuthProvider_Slack = "Slack" val Upsert = UpdateOptions().upsert(true) internal open fun slackUserToUpsertStatement(usr: SlackUserData): WriteModel<Document> { val query = BasicDBObject(UsersColl_UserId, usr.id()) val data = mapOf( UsersColl_AuthProvider to AuthProvider_Slack, UsersColl_UserId to usr.id(), UsersColl_Active to true, UsersColl_SlackRealName to usr.realName, UsersColl_SlackTeamId to usr.teamId ) val update = BasicDBObject(data) return UpdateOneModel<Document>( query, update, Upsert ) } val updates = users.map { slackUserToUpsertStatement(it) }.toList() val coll = db.getCollection(UsersColl) coll.bulkWrite(updates)

我该如何解决这个问题?

在类似问题的答案中,我没有看到字段java.lang.IllegalArgumentException: Invalid BSON field name AuthProvider(没有空格,没有点像点等特殊字符)的任何问题。

1 个答案:

答案 0 :(得分:2)

更换

return UpdateOneModel<Document>(
            query,
            update,
            Upsert
    )

通过

return ReplaceOneModel<Document>(query, Document(data), Upsert)

修复了问题。