【问题标题】:Creating a MongoDB index to enforce uniqueness for a field but only in combination with another value创建 MongoDB 索引以强制字段的唯一性,但只能与另一个值结合使用
【发布时间】:2021-10-29 18:43:15
【问题描述】:

我正在跟踪集合中的一些作业。每个作业都有一个名称和一个状态。我想强制任何给定名称只能有一个状态为“ACTIVE”的工作。在其他州可以有许多同名的工作,但在 ACTIVE 中只有一个。

我正在使用 Java 和 Spring Data。

我试过了:

        IndexFilter onlyActive = PartialIndexFilter.of(Criteria.where("state").is("ACTIVE"));
        mongoTemplate.indexOps(DownloadJob.class)
        .ensureIndex(
            new Index().on("name", Sort.Direction.ASC).partial(onlyActive).unique()
        );

当我插入具有相同名称和不同非活动状态的文档时,我仍然会遇到重复键异常。有什么想法可以实现吗?

【问题讨论】:

    标签: mongodb spring-data


    【解决方案1】:

    这行得通:

            IndexFilter onlyActive = PartialIndexFilter.of(Criteria.where("state").is("ACTIVE"));
            mongoTemplate.indexOps(DownloadJob.class)
            .ensureIndex(
                new Index().on("name", Sort.Direction.ASC).unique().partial(onlyActive)
            );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-24
      • 2015-01-11
      • 2012-03-24
      • 2016-01-18
      • 1970-01-01
      • 2012-11-16
      • 1970-01-01
      相关资源
      最近更新 更多