Partilhar via


Resolver problemas comuns na API do Azure Cosmos DB para MongoDB

APLICA-SE A: MongoDB

O artigo a seguir descreve erros comuns e soluções para implantações usando o Azure Cosmos DB para MongoDB.

Nota

O Azure Cosmos DB não hospeda o mecanismo MongoDB. Ele fornece uma implementação do protocolo de fio MongoDB versão 4.0, 3.6 e suporte legado para o protocolo de fio versão 3.2. Portanto, alguns desses erros só são encontrados na API do Azure Cosmos DB para MongoDB.

Erros comuns e soluções

Código Erro Descrição Solução
2 BadValue Uma causa comum é que um caminho de índice correspondente ao item ordenado por item especificado é excluído ou a ordem por consulta não tem um índice composto correspondente a partir do qual possa ser servido. A consulta solicita uma classificação em um campo que não está indexado. Crie um índice correspondente (ou índice composto) para a consulta de ordenação que está a ser tentada.
2 A transação não está ativa A transação multidocumentos ultrapassou o limite de tempo fixo de 5 segundos. Repita a transação multidocumentos ou limite o âmbito das operações na transação multidocumentos para a completar no limite de tempo de 5 segundos.
9 FailedToParse Indica que o servidor Cosmos DB não pôde interpretar ou processar um parâmetro porque a entrada fornecida não estava em conformidade com o formato esperado ou suportado. Certifique-se de que apenas parâmetros válidos e suportados estão incluídos nas suas consultas.
13 Não autorizado O pedido não tem as permissões para ser concluído. Verifique se está a utilizar as chaves corretas.
26 NamespaceNotFound Não é possível encontrar a base de dados ou a coleção que está a ser referenciada na consulta. Verifique se o nome da base de dados/coleção corresponde exatamente ao nome na consulta.
50 ExceededTimeLimit O pedido excedeu o tempo limite de 60 segundos de execução. Pode haver muitas causas para este erro. Uma das causas é quando a capacidade das unidades de solicitação atualmente alocadas não é suficiente para concluir a solicitação. Isto pode ser resolvido ao aumentar as unidades de pedido dessa coleção ou base de dados. Noutros casos, este erro pode ser solucionado através da divisão de um pedido grande em partes menores. Repetir uma operação de escrita que recebeu este erro pode resultar numa escrita duplicada.

Se você estiver tentando excluir grandes quantidades de dados sem afetar as RUs:
- Considere a utilização de TTL (com base no Carimbo de Data/Hora): Dados de expiração com a API do Azure Cosmos DB para MongoDB
- Utilize o tamanho do Cursor/Lote para executar a eliminação. Pode obter um único documento de cada vez e eliminá-lo através de um ciclo. Esta operação ajudará a eliminar dados lentamente sem afetar a aplicação de produção.
61 ShardKeyNotFound O documento no pedido não continha a chave shard da coleção (chave de partição do Azure Cosmos DB). Verifique se a chave shard da coleção está a ser utilizada no pedido.
66 ImmutableField O pedido está a tentar alterar um campo imutável Os campos "_id" são imutáveis. Certifique-se de que sua solicitação não tente atualizar esse campo ou o campo de chave de estilhaço.
67 CannotCreateIndex Não é possível concluir o pedido para criar um índice. Podem ser criados até 500 índices de campo único num contentor. Podem ser incluídos até oito campos num índice composto (os índices compostos são suportados na versão 3.6e superior).
112 WriteConflict A transação multidocumentos falhou devido a uma transação multidocumentos em conflito Repita a transação multidocumentos até ser concluída com êxito.
115 CommandNotSupported O pedido tentado não é suportado. Outros detalhes devem ser fornecidos no erro. Se essa funcionalidade for importante para suas implantações, crie um tíquete de suporte no portal do Azure e a equipe do Azure Cosmos DB entrará em contato com você.
11000 DuplicateKey A chave shard (chave de partição do Azure Cosmos DB) do documento que está a inserir já existe na coleção ou foi violada uma restrição de campo do índice exclusivo. Utilize a função update() para atualizar um documento existente. Se a restrição de campo de índice exclusivo tiver sido violada, insira ou atualize o documento com um valor de campo que ainda não existe no fragmento/partição. Outra opção seria usar um campo contendo uma combinação dos campos ID e chave de estilhaço.
16500 TooManyRequests O número total de unidades de pedido consumidas é maior do que a taxa pedido/unidade aprovisionada para a coleção e foi limitada. Pondere dimensionar o débito atribuído a um contentor ou a um conjunto de contentores do portal do Azure ou pode repetir a operação. Se você habilitar o SSR (repetição do lado do servidor), o Azure Cosmos DB tentará novamente automaticamente as solicitações que falharem devido a esse erro.
16501 LimiteMemóriaExcedido Como um serviço multi-inquilino, a operação ultrapassou a alocação de memória do cliente. Isso só é aplicável ao Azure Cosmos DB para MongoDB versão 3.2. Reduza o âmbito da operação através de critérios de consulta mais restritivos ou contacte o suporte a partir do portal do Azure. Exemplo: db.getCollection('users').aggregate([{$match: {name: "Andy"}}, {$sort: {age: -1}}]))
40324 Nome da fase do pipeline não reconhecido. O nome da fase no pedido de pipeline de agregação não foi reconhecido. Verifique se todos os nomes de pipelines de agregação são válidos no pedido.
- Problemas da versão de transmissão do MongoDB As versões mais antigas dos controladores do MongoDB não conseguem detetar o nome da conta do Azure Cosmos DB nas cadeias de ligação. Anexe appName=@accountName@ no final da cadeia de conexão, onde accountName é o nome da conta do Azure Cosmos DB.
- Problemas de rede do cliente do MongoDB (como exceções de socket ou endOfStream) Falha no pedido da rede. Geralmente causado por uma ligação TCP inativa que o cliente do MongoDB está a tentar utilizar. Os controladores do MongoDB utilizam frequentemente conjuntos de ligações, o que resulta numa ligação aleatória escolhida a partir do conjunto que está a ser utilizado para um pedido. Normalmente, as ligações inativas expiram no Azure Cosmos DB após quatro minutos. Pode repetir estes pedidos falhados no código da aplicação, alterar as definições do cliente do MongoDB (controlador) para repor as ligações TCP inativas antes da janela de tempo limite de quatro minutos ou configurar as definições keepalive do SO para manter as ligações TCP num estado ativo.

Para evitar mensagens relacionadas com a conectividade, altere a cadeia de ligação de modo a definir maxConnectionIdleTime para 1 a 2 minutos.
- Controlador do Mongo: configure maxIdleTimeMS=120000
- Node.JS: configure socketTimeoutMS=120000, autoReconnect = true, keepAlive = true, keepAliveInitialDelay = 3 minutos
- A Shell do Mongo não está a funcionar no portal do Azure Quando o utilizador está a tentar abrir uma shell do Mongo, nada acontece e o separador fica em branco. Verifique a Firewall. A firewall com a shell do Mongo não é suportada no portal do Azure.
- Instale o shell Mongo no computador local dentro das regras de firewall
- Utilize a shell do Mongo legada
- Não é possível ligar à cadeia de ligação A cadeia de conexão foi alterada durante a atualização de 3.2 -> 3.6 Ao usar a API do Azure Cosmos DB para contas MongoDB, a versão 3.6 das contas tem o ponto de extremidade no formato *.mongo.cosmos.azure.com , enquanto a versão 3.2 das contas tem o ponto de extremidade no formato *.documents.azure.com.

Próximos passos

  • Saiba como usar o Studio 3T com a API do Azure Cosmos DB para MongoDB.
  • Saiba como usar o Robo 3T com a API do Azure Cosmos DB para MongoDB.
  • Explore exemplos do MongoDB com a API do Azure Cosmos DB para MongoDB.