Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Menu Docs
Página inicial do Docs
/ /

$ne (operador de predicado da query)

$ne

$ne seleciona 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.

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

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.

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.

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'
}
]

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.

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: $ne corresponde 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: $ne corresponde 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.

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'
}
]

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'
}
]

Voltar

$lte

Nesta página