Menu Docs
Página inicial do Docs
/
Manual do MongoDB

Restrições únicas em campos arbitrários

Nesta página

  • Considerações

Se não for possível usar um campo exclusivo como chave de fragmento ou se for necessário impor a exclusividade em vários campos, você deverá criar outracoleção para atuar como uma "coleção proxy". Essa collection deve conter uma referência ao documento original (ou seja, seu ObjectId) e à chave exclusiva.

Considere uma coleção records que armazena informações de usuário. O campo email não é a chave de fragmento, mas precisa ser único.

A coleção proxy então conteria o seguinte:

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

Utilize o seguinte comando para criar um índice único no campo email:

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

O exemplo a seguir primeiro tenta inserir um documento contendo o campo de destino e um ID único gerado na coleção proxy. Se a operação for bem-sucedida, ela inserirá o documento completo na coleção records.

records = db.getSiblingDB('records');
proxy = db.getSiblingDB('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...
})

Observe que essa metodologia requer a criação de um ID exclusivo para o campo primary_id em vez de permitir que o MongoDB o crie automaticamente na inserção do documento.

Se você precisar impor exclusividade em vários campos, cada campo exigiria sua própria coleção de proxy.

Dica

Consulte:

A documentação completa de: createIndex() e shardCollection.

  • Seu aplicativo deve detectar erros ao inserir documentos na coleção "proxy" e deve impor consistência entre as duas coleções.

  • Se a coleção de proxy exigir fragmentação, você deverá fragmentar o único campo no qual deseja impor a exclusividade.

  • Para impor a exclusividade em mais de um field usando coleção de proxy fragmentadas, você deve ter uma coleção de proxy para cada campo para o qual deseja impor a exclusividade. Se você criar vários índice único em uma única proxy coleção, não poderá fragmentar as coleções de proxy.

Próximo

O que é o MongoDB?

Nesta página