Definição
$ne$neseleciona documentos em que o valor do campo não é igual ao valor especificado. Inclui documentos que não contêm o campo.Para comparação de diferentes valores dos tipos de BSON, consulte o pedido de comparação de BSON especificado.
Compatibilidade
Você pode utilizar o $ne para implantações hospedadas nos seguintes ambientes:
MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
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.
Exemplos
Os exemplos nesta página utilizam dados do conjunto de dados de amostra sample_mflix. Para obter detalhes sobre como carregar esse conjunto de dados em sua implantação autogerenciada do MongoDB , consulte Carregar o conjunto de dados de amostra. Se você fez modificações 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 } )
[ { runtime: 1256, title: 'Centennial' }, { runtime: 1140, title: 'Baseball', rated: 'TV-PG' } ]
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 } } )
{ acknowledged: true, insertedId: null, matchedCount: ..., modifiedCount: ..., upsertedCount: 0 }
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
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.
Os exemplos a seguir retornam filmes com um tempo de duração de mais de 1000 minutos para demonstrar cada comportamento.
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 } )
[ { genres: [ 'Documentary', 'History', 'Sport' ], title: 'Baseball' } ]
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 } )
[ { genres: [ 'Action', 'Adventure', 'Drama' ], title: 'Centennial' }, { genres: [ 'Documentary', 'History', 'Sport' ], title: 'Baseball' } ]