【发布时间】:2019-03-22 19:35:23
【问题描述】:
假设我有 a 和 b 字段。我想要一个复合唯一性,如果a: 1, b: 2,我将无法做到a: 2, b: 1。
我想要这个的原因是因为我正在制作一个“朋友列表”类型的集合,如果 a 连接到 b,那么它也会自动反过来。
这在架构级别上是否可行,还是我需要进行查询才能检查。
【问题讨论】:
-
@AnthonyWinzlet 我实际上想到了另一种可能的方法(我仍在查看是否有任何关于此的文档)。我只需创建一个包含 2 个
ObjectIds的数组:requester和requestee(顺序无关紧要)。是否可以创建一个索引来确保数组中的所有值都不匹配另一个文档?例如。[1, 2]已经插入,[1, 3]是合法的,但[2, 1]不是 -
A.Lau 可能会有另一种方法来做到这一点,但我认为没有比这更好的方法了。并且您可以在该答案中使用
$addToSet而不是$push的独特之处。如果您有任何其他问题,请随时提出。 -
@AnthonyWinzlet
$addToSet实际上只是为了单个文档的唯一性,而不是跨多个文档,也不是顺序。我可能只会使用$all来确保该组合首先不存在 -
@AnthonyWinzlet 编写了我当前的实现尝试,尽管它不使用唯一索引。
标签: mongodb indexing unique-index