因为mongodb将索引包含一个或多个索引字段的稀疏复合索引,所以它导致我的唯一稀疏索引失败,因为其中一个字段是可选的,并且null
由于mongodb为了索引而被强制转换.
对于这个领域和其他一些领域的组合,我需要数据库级别的唯一性保证,并且必须通过一些串联字符串来管理应用程序级别.
作为替代方案,我考虑将可能为空的索引字段的默认值设置为'null ' + anObjectId
,因为它允许我保留索引而不会导致错误.这看起来像是一个敏感的(虽然是hacky)解决方案吗?有没有人知道我可以在复合索引上强制执行数据库级唯一性的更好方法?
编辑:我被要求详细说明实际的问题域,所以在这里.
我们从客户那里获得了需要集成到数据库中的大量数据.这些供稿包括客户提供的各种(3)唯一标识符,用于更新数据供稿刷新时存储在数据库中的版本.我需要将这些标识符的唯一性与客户联系起来,因为相同的标识符可能来自多个来源,我们希望允许这样做.
文档结构如下所示:
{
"identifiers": {
"identifierA": ...,
"identifierB": ...,
"identifierC": ...
},
"client": ...
}
Run Code Online (Sandbox Code Playgroud)
因为每个单独的标识符是可选的(需要三个中的至少一个),所以我需要唯一地索引索引与客户端的组合(例如,一个索引是client
加号的组合identifierA
).但是,此索引必须仅在标识符存在时发生,但我的mongodb不支持此(请参阅上面的超链接).
我正在考虑上述解决方案,但我想听听其他人是否解决了这个问题或有任何建议.