¿Es posible crear un índice con un valor especificado en MongoDB?
Me gustaría almacenar trabajos en una colección con estos atributos: estado y valor de hash.
Cuando se crea el trabajo por primera vez, el estado será pendiente. Quiero permitir solo un trabajo con estado pendiente y un valor de hash único al mismo tiempo.
Digamos que hay un valor de hash 123 y un estado pendiente, si creo un trabajo con el mismo valor de hash 123 y estado pendiente, quiero que se genere un error de índice.
Pero si solo hay un trabajo con el valor de hash 123 y el estado fallido en la colección, quiero permitir la creación del trabajo ya que no hay ningún valor de hash 123 y estado pendiente.
Supongo que puedo consultar primero la colección antes de crear, pero solo quiero saber si esto se puede lograr a través de un índice único. Gracias.
_id: 1,
estado: ‘pendiente’,
valor_hash: ‘d1061af8b1a46bdc74329a16b05f1408f0368925’
_id: 2,
estado: ‘fallido’,
valor_hash: ‘d1061af8b1a46bdc74329a16b05f1408f0368925’
_id: 3,
estado: ‘pendiente’,
valor_hash: ‘405e619470ae575e83f62625d0bb3cc779bea2d5’
davy.ai
Sí, esto se puede lograr a través de un índice único. Puede crear un índice único en los campos “estado” y “valor_hash” para asegurar que solo haya un trabajo con estado pendiente y un valor_hash único al mismo tiempo.
Aquí tienes un ejemplo de cómo crear el índice único usando la consola de MongoDB:
Esto crea un índice único en los campos “estado” y “valor_hash” con la condición de que solo los documentos con el campo “estado” igual a “pendiente” deben considerarse únicos.
Si intentas crear un nuevo trabajo con valor_hash 123 y estado pendiente cuando ya existe un trabajo con el mismo valor_hash y estado pendiente, MongoDB lanzará un error de índice. Pero si hay un trabajo con valor_hash 123 y estado fallido, se permitirá crear el nuevo trabajo con valor_hash 123 y estado pendiente.