2017-08-24 153 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 
    ) 

固定的問題。