Definição
Compatibilidade
Você pode utilizar o $ne para implantações hospedadas nos seguintes ambientes:
- MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Sintaxe
O operador $ne tem o seguinte formato:
{ field: { $ne: value } }
Observação
Se o valor de $ne for nulo, consulte Filtro de não igualdade.
Comportamento
Type Bracketing
Ao contrário dos operador de desigualdade ($gt, $gte, $lt e $lte), $ne não usa colchetes de tipo. Em vez disso, ele corresponde a documento onde o valor do campo não é igual ao valor especificado, independentemente do tipo do valor.
Por exemplo, { a: { $ne: 2 } } também corresponde a documento onde a é uma string.
Comparação de arrays
Ao comparar arrays, o $ne se comporta de forma diferente dependendo se você passa um escalar ou uma array como valor de comparação.
Comparação escalar:
$necorresponde a documentos em que o valor escalar não está presente como um elemento na array, incluindo documentos que não têm o campo.Comparação exata de array:
$necorresponde a documentos em que a array de campo não é idêntica à array especificada, incluindo documentos com uma ordem de elemento diferente, um número diferente de elementos ou um campo ausente.
Exemplos
Os exemplos nesta página usam dados do conjunto de dados sample_mflix. Para obter detalhes sobre como carregar este conjunto de dados em sua implantação do MongoDB autogerenciado, consulte Carregar o conjunto de dados de amostra. Se você fez alguma modificação nos bancos de dados de amostra, talvez seja necessário descartar e recriar os bancos de dados para executar os exemplos nesta página.
Corresponder campos de documentos que não são iguais
O exemplo a seguir retorna filmes em que runtime é maior que 1000 minutos e rated não é igual a "G". Como $ne também corresponde a documentos que não contêm o campo rated, a query retorna filmes mesmo quando os dados de classificação não estão disponíveis:
db.movies.find( { rated: { $ne: "G" }, runtime: { $gt: 1000 } }, { _id: 0, title: 1, runtime: 1, rated: 1 } )
Atualização baseada em campos de documentos incorporados não iguais
O exemplo a seguir define o campo highestRated com base em uma comparação $ne com um campo em um documento incorporado. A operação updateMany() procura um documento incorporado, imdb, com um subcampo chamado rating. Ela usa $set para atualizar o campo highestRated para false em cada documento em que rating tem um valor que não é igual a 9.3 ou em que o subcampo rating não existe:
db.movies.updateMany( { "imdb.rating": { $ne: 9.3 } }, { $set: { "highestRated": false } } )
O equivalente SQL a esta query é:
UPDATE movies SET highestRated = false WHERE imdb_rating != 9.3
O operador de desigualdade $ne não é muito seletivo, pois geralmente corresponde a uma grande parte do índice. Como resultado, em muitos casos, uma query $ne com um índice pode não ter um desempenho melhor do que uma query $ne que deve verificar todos os documentos em uma collection. Consulte também Criar queries seletivas.
arrays
Os exemplos a seguir mostram como $ne se comporta de forma diferente dependendo se você passa um escalar ou um array como valor de comparação.
Usar uma comparação escalar
O exemplo a seguir retorna filmes em que runtime é maior que 1000 minutos e "Drama" não é um elemento da array genres:
db.movies.find( { genres: { $ne: "Drama" }, runtime: { $gt: 1000 } }, { _id: 0, title: 1, genres: 1 } )
Usar uma comparação exata de array
O exemplo a seguir retorna filmes em que runtime é maior que 1000 minutos e a array genres não é exatamente igual a [ "Drama" ]. Ao contrário da comparação escalar, Centennial (com genres: [ "Action", "Adventure", "Drama" ]) corresponde porque essa array não é idêntica a [ "Drama" ]:
db.movies.find( { genres: { $ne: [ "Drama" ] }, runtime: { $gt: 1000 } }, { _id: 0, title: 1, genres: 1 } )