Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Imponer la unicidad en un campo que no sea la clave del fragmento.

Si no puede utilizar un campo único como clave de fragmentación, o si necesita garantizar la unicidad en varios campos, cree otra colección que actúe como colección proxy.

Un clúster fragmentado impone una restricción de unicidad entre fragmentos solo cuando el índice único se encuentra en la clave del fragmento o incluye la clave del fragmento como prefijo. Una colección proxy sortea esta restricción: la colección proxy contiene tanto una referencia al documento original como la clave única, y la aplicación escribe primero en la colección proxy.

Cuando utilice una colección proxy, tenga en cuenta lo siguiente:

  • Su aplicación debe detectar errores al insertar documentos en la colección proxy y debe garantizar la coherencia entre ambas colecciones.

  • Si la colección proxy requiere particionado, se debe particionar en el único campo en el que se desea aplicar la unicidad.

  • Cada campo requiere su propia colección proxy. Para garantizar la unicidad en más de un campo mediante colecciones proxy fragmentadas, debe tener una colección proxy para cada campo. Si crea varios índices únicos en una sola colección proxy, no podrá fragmentarla.

  • Este enfoque requiere crear un ID único para el campo primary_id en lugar de dejar que MongoDB lo cree automáticamente al insertar el documento.

Para consultar el conjunto completo de restricciones que se aplican a los índices únicos en colecciones fragmentadas, consulte la sección "Mantener la unicidad en clústeres fragmentados".

  • Identifique el campo que requiere una restricción única pero que no puede formar parte de la clave de fragmentación.

  • Confirme que ningún documento existente infringe la restricción de unicidad para el campo.

  • Conectar mongosh a una instancia de mongos.

Consideremos una colección records que almacena información de usuario. El campo email no es la clave de fragmentación, pero debe ser único. La colección proxy contiene los siguientes campos:

{
"_id" : ObjectId("..."),
"parent_id" : "<ID>",
"email" : "<string>"
}
1

Cree un índice único en el campo email de la colección proxy:

db.proxy.createIndex( { "email" : 1 }, { unique : true } )
email_1
2

Inserta un documento que contenga el campo de destino y un ID único generado en la colección proxy. Si la operación es exitosa, inserta el documento completo en la colección records.

records = db.getCollection('records');
proxy = db.getCollection('proxy');
var primary_id = ObjectId();
proxy.insertOne({
"_id" : primary_id,
"email" : "example@example.net"
})
// if: the above operation returns successfully,
// then continue:
records.insertOne({
"_id" : primary_id,
"email": "example@example.net",
// additional information...
})