MongoDB Realm同步报错Schema mismatch:cardId属性可空性不匹配
错误原因
该同步错误由Mongo Atlas服务端与Android客户端的Employee模型cardId字段空值约束不匹配触发:
- 客户端侧:你在
Employee类的cardId字段上添加了@Required注解,强制约定该字段为非空,不允许存储null值 - 服务端侧:你在Atlas配置的Employee集合BSON Schema中,
cardId字段未配置非空约束,允许存储null值
Realm同步流程会严格校验两端同名字段的数据类型、空值约束等schema规则,只要规则不一致,就会直接拦截下载的变更集,抛出CLIENT_BAD_CHANGESET(realm::sync::ClientError:112)错误,拒绝完成同步。
修复方式
根据实际业务需求二选一即可:
- 若业务要求
cardId必须非空:修改Atlas端Employee集合的BSON Schema,为cardId添加非空约束,同时清理集合内已存在的cardId为null的历史脏数据,保证两端规则一致 - 若业务允许
cardId为空:移除Android端Employee类中cardId字段上的@Required注解,重新编译运行应用即可
提示:你同时给featureVector数组、password字段添加了
@Required注解,修复cardId问题后建议同步核对这几个字段在Atlas BSON Schema中的空值配置,避免其他字段触发同类schema不匹配错误。
内容的提问来源于stack exchange,提问作者Zappy.Mans
相关产品推荐
相关产品推荐

