【问题标题】:Is it possible to create index with specified value in mongodb?是否可以在 mongodb 中创建具有指定值的索引?
【发布时间】:2022-01-04 04:18:28
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你能提供一些示例 JSON 数据吗?
  • @WernfriedDomscheit 好的,我已经添加了它
  • 这似乎是在问如何创建一个唯一的、部分的、复合索引?

标签: mongodb indexing unique


【解决方案1】:

就像乔说的那样,我需要的是部分过滤器表达式,以确保索引仅应用于状态待定的作业

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

【讨论】:

  • 虽然这段代码 sn-p 可以解决问题,但它没有解释为什么或如何回答这个问题。请include an explanation for your code,因为这确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
猜你喜欢
  • 1970-01-01
  • 2017-05-24
  • 1970-01-01
  • 1970-01-01
  • 2011-02-11
  • 2014-08-14
  • 2012-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多