首页 > 解决方案 > MongoDB - 整个集合的唯一索引

问题描述

是否可以在整个Set上创建一个唯一索引,比如说 UserId?

示例代码

@Indexed
val participantIds: Set<UserId>

这样一来,整个Set 是独一无二的。这种组合只存在一次

例子

[1, 2] // OK
[2, 3] // OK
[2, 1] // NOT OK (combination exists already)

更新

该用例用于消息传递系统。参与者 ID是该单个或组信使的成员。

阅读答案后,我觉得在例如服务层中检查它可能是我的用例,使用$all / $size查询检查来验证这种组合不存在。

标签: mongodb

解决方案


Mongodb 没有提供开箱即用的解决方案。

您必须自己实施一种解决方法,我个人会做的是唯一索引一个包含设置数字的新字段:

const newDoc = { participantIds: [1, 2, 3]};
const uniqueStr = newDoc.participantIds.sort().join('');

await db.collection.insertOne({ ...newDoc, uniqueField: uniqueStr });

现在通过建立一个唯一的索引,uniqueField你可以维护它。请注意,每次文档更新都需要更新此字段,这会增加很多开销。

也许如果你能提供更多关于你想要做什么和实现的细节,那么帮助你想出一个更可行的解决方案会更容易。


推荐阅读