gpt4 book ai didi

mongodb - 处理mongodb唯一、稀疏、复合索引

转载 作者:IT老高 更新时间:2023-10-28 13:12:07 26 4
gpt4 key购买 nike

因为mongodb will index sparse, compound indexes that contain 1 or more of the indexed fields ,它导致我唯一的稀疏索引失败,因为这些字段之一是可选的,并且为了索引的目的被 mongodb 强制为 null

我需要数据库级别的唯一性确保该字段和其他一些字段的组合,并且必须通过一些连接字符串在应用程序级别进行管理让我担心。

作为替代方案,我考虑将可能为空的索引字段的默认值设置为 'null ' + anObjectId,因为它可以让我保留索引而不会导致错误。这看起来像是一个明智的(尽管很老套)的解决方案吗?有谁知道我可以在复合索引上强制执行数据库级唯一性的更好方法?

编辑:我被要求详细说明实际的问题域,所以就这样吧。

我们从客户那里获得大量数据馈送,我们需要将其集成到我们的数据库中。这些提要包括客户提供的各种 (3) 唯一标识符,我们使用这些标识符在数据提要刷新时更新我们存储在数据库中的版本。我需要将这些标识符的唯一性与客户联系起来,因为同一个标识符可能会出现在多个来源中,我们希望允许这样做。

文档结构如下:

{
"identifiers": {
"identifierA": ...,
"identifierB": ...,
"identifierC": ...
},
"client": ...
}

因为每个单独的标识符是可选的(至少需要三个中的一个),我需要唯一索引索引与客户端的组合(例如一个索引是 client 的组合加上 identifierA)。但是,这个索引必须只有在标识符存在时才会出现,但是我的 mongodb 不支持这个(见上面的超链接)。

我正在考虑上述解决方案,但我想听听其他人是否解决了这个问题或有建议。

最佳答案

https://docs.mongodb.org/manual/core/index-partial/

从 mongoDB 3.2 开始,您也可以创建部分索引来支持这一点。

db.users.createIndex(
{ name: 1, email: 1 },
{ unique: true, partialFilterExpression: { email: { $exists: true } } }
)

关于mongodb - 处理mongodb唯一、稀疏、复合索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28183109/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com