是否可以在 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,
},
)
我想将作业存储在具有以下属性的集合中: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,
},
)