2017-08-24 157 views
1

我尝试使用下面的代码UPSERT数据到蒙戈集合时:当UPSERT执行(在上面的代码最后三行)“无效BSON字段名” 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

我该如何解决这个问题?

我没有看到类似问题的答案中提到的字段AuthProvider(没有空格,没有特殊字符像点)的任何问题。

回答

1

通过

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

更换

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

固定的问题。