10

我在实体中有一个字段,它必须存在,但不一定是唯一的。有没有办法在 Mongo 中强制执行这个约束?

我知道 mongo 集合是无模式的,集合可以拥有的唯一模式是索引模式。但我没有看到是否有一个索引选项来确保字段值不为空,其中一个空字段值满足以下 javascript 表达式:

!value && value !== 0 && value !== false
4

3 回答 3

6

只有在 UNIQUE 索引上,您才能模拟它。您可以创建一个包含缺少字段/值的条目的文档,它将在索引中创建具有 NULL 值的文档,并且不会允许进一步的缺失值。

由于您的要求是 NON UNIQUE 键,因此我认为您此时在 MONGODB (v2.2) 中没有选项来确保值必须出现在索引列上。

于 2013-01-02T14:52:52.203 回答
3

在 mongodb 中,只有_id字段才能满足您的要求。对于这个问题,索引似乎不是一个好主意(既不可行)。

我认为您必须在应用程序的插入和更新操作中强制执行此规则,而不是要求 mongodb 为您监视它。

于 2013-01-02T17:56:23.027 回答
0

这可能是您想要的答案(在 Java/Kotlin 中):

    col.createIndex(Document("note", 2), IndexOptions()
            .partialFilterExpression(Filters.and(
                    Filters.gt("note", ""),
                    Filters.exists("note")))
于 2019-01-10T15:45:42.880 回答