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

$ne (query operador predicado de query)

$ne

$ne selecciona los documentos donde el valor del campo no sea igual al valor especificado. Esto incluye documentos que no contienen el campo.

Para la comparación de diferentes valores de tipos BSON, consulta el orden de comparación BSON especificado.

Puedes usar $ne para implementaciones alojadas en los siguientes entornos:

  • MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube

  • MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB

  • MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.

El operador $ne tiene el siguiente formato:

{ field: { $ne: value } }

Nota

Si el valor de $ne es nulo, consultar Filtro de no igualdad.

Los ejemplos de esta página utilizan datos del conjunto de datos de muestra sample_mflix. Para obtener más información sobre cómo cargar este conjunto de datos en la implementación autogestionada de MongoDB, consultar Cargar el conjunto de datos de muestra. Si se realizó alguna modificación en las bases de datos de muestra, es posible que se deban descartar y volver a crear las bases de datos para ejecutar los ejemplos de esta página.

El siguiente ejemplo devuelve películas donde runtime es mayor que 1000 minutos y rated no es igual a "G". Debido a que $ne también coincide con documentos que no contienen el campo rated, la query devuelve las películas incluso cuando los datos de calificación no están disponibles:

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

El siguiente ejemplo establece el campo highestRated basándose en una comparación de $ne contra un campo en un documento incrustado. La operación updateMany() realiza una búsqueda de un documento incrustado, imdb, con un subcampo llamado rating. Utilizar $set para actualizar el campo highestRated a false en cada documento donde el valor de rating no sea igual a 9.3 o donde el subcampo rating no exista:

db.movies.updateMany(
{ "imdb.rating": { $ne: 9.3 } },
{ $set: { "highestRated": false } }
)
{
acknowledged: true,
insertedId: null,
matchedCount: ...,
modifiedCount: ...,
upsertedCount: 0
}

El equivalente en SQL para esta query es:

UPDATE movies SET highestRated = false WHERE imdb_rating != 9.3

El operador de desigualdad $ne no es muy selectivo, ya que a menudo coincide con una gran parte del índice. Como resultado, en muchos casos, es posible que una query $ne con un índice no funcione mejor que una query $ne que deba escanear todos los documentos de una colección. Consulta también Crear queries selectivas.

Al comparar arreglos, $ne se comporta de manera diferente según se pase un escalar o un arreglo como valor de comparación.

  • Comparación escalar: $ne coincide con los documentos donde el valor escalar no está presente como un elemento en el arreglo, incluyendo los documentos que no tienen el campo.

  • Comparación exacta de arreglos: $ne compara documentos en los que el arreglo del campo no es idéntico al arreglo especificado, incluyendo documentos con un orden de elementos diferente, una cantidad diferente de elementos o un campo ausente.

Los siguientes ejemplos devuelven películas con una duración superior a 1000 minutos para demostrar cada comportamiento.

El siguiente ejemplo devuelve películas donde runtime es mayor que 1000 minutos y "Drama" no es un elemento del arreglo genres:

db.movies.find(
{ genres: { $ne: "Drama" }, runtime: { $gt: 1000 } },
{ _id: 0, title: 1, genres: 1 }
)
[
{
genres: [ 'Documentary', 'History', 'Sport' ],
title: 'Baseball'
}
]

El siguiente ejemplo devuelve películas donde runtime es mayor que 1000 minutos y el arreglo genres no es exactamente igual a [ "Drama" ]. A diferencia de la comparación escalar, Centennial (con genres: [ "Action", "Adventure", "Drama" ]) coincide porque ese arreglo no es idéntico 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'
}
]

Volver

$lte

En esta página