是否可以在 mongodb 中创建具有指定值的索引?

Is it possible to create index with specified value in mongodb?

我想将作业存储在具有以下属性的集合中:state & hash_value。 首次创建作业时,状态将为挂起。我想一次允许 1 个状态为 pending 且唯一 hash_value 的作业。 假设有 hash_value 123 和状态挂起,如果我创建一个带有 hash_value 123 和状态挂起的作业,我希望触发索引错误。 但是,如果集合中只有 hash_value 123 且状态失败的作业,我想允许创建作业,因为没有 hash_value 123 且状态未决。 我想我可以在创建之前先查询集合,但我只想知道这是否可以通过唯一索引实现。谢谢

_id: 1,
state: 'pending',
hash_value: 'd1061af8b1a46bdc74329a16b05f1408f0368925'

_id: 2,
state: 'failed',
hash_value: 'd1061af8b1a46bdc74329a16b05f1408f0368925'

_id: 3,
state: 'pending',
hash_value: '405e619470ae575e83f62625d0bb3cc779bea2d5'

正如 Joe 所说,我需要的是部分过滤器表达式,以确保索引仅应用于状态为 pending 的作业

await db.collection('job').createIndex(
  { state: 1, hash_value: 1 },
  {
    partialFilterExpression: { state: { $eq: "pending" } },
    name: "pending_token_idx",
    unique: true,
  },
 )