Evite usar cifrões ($) ou pontos (.) nos nomes dos seus campo . O MongoDB armazena documentos que usam esses caracteres em nomes de campo , mas os desaconselha por estes motivos:
Desempenho da query. Não é possível indexar esses campos, o que pode tornar as queries neles menos eficientes. Para saber quais outras funcionalidades esses campos não podem usar, consulte Restrições gerais.
Consultabilidade. Você não pode executar queries desses campos diretamente. Para lê-los ou modificá-los, você precisa de métodos assistente
$getFieldcomo, e. Sem esses ajudantes, o MongoDB interpreta um nome de campo que contém um ponto como um caminho para um campo$setField$literalincorporado.
As regras de validação de nome de campo não são as mesmas para todos os tipos de operações de armazenamento.
Restrições gerais
Existem algumas restrições gerais para o uso de nomes de campo prefixados com cifrão ($) ou que contenham um ponto (.). Esses campos não podem:
Ser indexado
Ser usado como parte de uma chave de fragmento
Ser validados usando
$jsonSchemaSer modificados com uma sequência de escape
Ser usado com criptografia de nível de campo
Ser usado como subcampo em um documento
_idTer mais de 255 palavras separadas por pontos nos nomes dos campo
(Somente para prefixo
$) Ser considerado no nível raiz de um documento se o nome do campo colidir com um nome de campo que o MongoDB reserva para metadados internos do documento
O MongoDB reserva um conjunto de nomes de campo com prefixo $para metadados internos de documento . Se um nome de campo de nível raiz em seus dados colidir com um desses nomes reservados, o MongoDB poderá não preservar o campo ou retorná-lo às consultas e, em alguns casos, remover o campo dos resultados. Esses nomes reservados são internos e podem mudar entre as versões, portanto, não armazene dados em nomes de campo prefixados em $no nível raiz ou confie na capacidade de lê-los de volta.
Aviso
Perda de dados possível com assinaturas em dólares ($) e períodos (.)
Há uma pequena chance de perda de dados ao usar nomes de campo com prefixo de cifrão ($) ou nomes de campo que contenham pontos (.) se esses nomes de campo forem usados em conjunto com gravações não reconhecidas de (write concern w=0) em servidores mais antigos que o MongoDB 5.0.
Ao executar os comandos insert, update e findAndModify, os drivers compatíveis com a versão 5.0 removem as restrições de uso de documentos com nomes de campo com prefixo de cifrão ($) ou que contenham pontos (.). Esses nomes de campo geraram um erro do lado do cliente nas versões anteriores do driver.
As restrições são removidas independentemente da versão do servidor à qual o driver está conectado. Se um driver do 5.0 enviar um documento para um servidor mais antigo, o documento será rejeitado sem enviar um erro.
Aviso
Preocupações de importação e exportação com assinaturas de dólar ($) e períodos (.)
A partir do MongoDB 5.0, os nomes dos campos do documento podem ter prefixo de cifrão ($) e podem conter pontos (.). No entanto, mongoimport e mongoexport podem não funcionar como esperado em algumas situações com nomes de campo que fazem uso destes caracteres.
O JSON estendido v2 MongoDB não consegue diferenciar entre os wrappers de tipo e os campos que têm o mesmo nome dos wrappers de tipo. Não use formatos JSON estendidos em contextos onde as representações BSON correspondentes possam incluir chaves prefixadas com cifrões ($). O mecanismo DBRef é uma exceção a esta regra geral.
Também há restrições quanto ao uso de mongoimport e mongoexport com pontos (.) em nomes de campos. Como os arquivos CSV usam o ponto (.) para representar hierarquias de dados, um ponto (.) em um nome de campo será interpretado incorretamente como um nível de aninhamento.
Saiba mais
Para obter exemplos de como lidar com nomes de campos que contêm pontos e cifrões, consulte estas páginas: