由于mongodb将索引稀疏、包含一个或多个索引字段的复合索引, 这导致我的唯一性稀疏索引失败, 因为其中一个字段是可选的,并且由于索引目的被mongodb强制转换为
我需要在数据库级别上确保这个字段和其他几个字段的组合的唯一性,而通过某些连接字符串在应用程序级别上管理这个问题让我感到担忧。
作为替代方案,我考虑将可能为空的索引字段的默认值设置为
编辑:我被要求更详细地阐述实际的问题领域,所以在这里说一下。
我们从客户那里获取大量数据源,需要将其整合到我们的数据库中。这些源包含客户提供的三个不同的标识符,我们用它们来更新我们在数据库中存储的版本,以便在数据源刷新时使用。我需要将这些标识符的唯一性与客户绑定,因为相同的标识符可能来自多个来源,而我们希望允许这种情况发生。
文档结构如下:
因为每个标识符都是可选的(至少需要其中三个中的一个),所以我需要唯一地索引与客户端的组合(例如,一个索引是由
我正在考虑上述解决方案,但我想听听其他人是否已经解决了这个问题或者有什么建议。
null
。我需要在数据库级别上确保这个字段和其他几个字段的组合的唯一性,而通过某些连接字符串在应用程序级别上管理这个问题让我感到担忧。
作为替代方案,我考虑将可能为空的索引字段的默认值设置为
'null ' + anObjectId
,因为这样可以让我保留索引而不会出现错误。这个方法是否可行(尽管有点hacky)?是否有更好的方法来强制执行复合索引的数据库级别的唯一性?编辑:我被要求更详细地阐述实际的问题领域,所以在这里说一下。
我们从客户那里获取大量数据源,需要将其整合到我们的数据库中。这些源包含客户提供的三个不同的标识符,我们用它们来更新我们在数据库中存储的版本,以便在数据源刷新时使用。我需要将这些标识符的唯一性与客户绑定,因为相同的标识符可能来自多个来源,而我们希望允许这种情况发生。
文档结构如下:
{
"identifiers": {
"identifierA": ...,
"identifierB": ...,
"identifierC": ...
},
"client": ...
}
因为每个标识符都是可选的(至少需要其中三个中的一个),所以我需要唯一地索引与客户端的组合(例如,一个索引是由
client
加上 identifierA
组成)。但是,只有当标识符存在时,才能出现此索引,但这在mongodb中不受支持(请参见上面的超链接)。我正在考虑上述解决方案,但我想听听其他人是否已经解决了这个问题或者有什么建议。
[{ "type": "A", "data": "Something },{ "type": "B", "data": "Something else" }]
这样使用文档数组。但这正是我所说的“解释实际问题”的含义。如果您告诉我们存储的数据类型,约束条件以及如何使用它,那么就可以清楚地看到解决问题的其他方法。 - Neil Lunn