es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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’

Tags:  , ,

Answer

  1. Avatar for 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:

    db.jobs.createIndex({estado: 1, valor_hash: 1}, {unique: true, partialFilterExpression: {estado: "pendiente"}})
    

    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.

Comments are closed.