HOWTO · MongoDB

El operador $ne en MongoDB

El operador $ne también se llama operador no igual. Puede usarlo en los métodos de búsqueda o actualización.

En esta página

El operador de consulta $ne de MongoDB selecciona documentos cuyo valor de campo no es igual a un valor especificado. Es útil cuando una consulta debe excluir un valor y puede aparecer tanto en filtros de lectura como en filtros de actualización. Hay un detalle importante al interpretar los resultados: un documento también coincide con $ne si el campo no existe. Si necesitas que el campo exista, añade una condición $exists: true junto con la desigualdad.

Qué documentos coinciden con el operador $ne

La expresión { field: { $ne: value } } comprueba si field difiere de value. Por ejemplo, { city: { $ne: "New York" } } selecciona documentos cuyo city no es "New York", así como documentos que no tienen el campo city. No significa «el campo existe y tiene otro valor». Esta distinción puede afectar los recuentos y las actualizaciones posteriores cuando los registros tienen datos incompletos.

La comparación se hace con el valor que proporcionas. Si el campo contiene un array, las reglas de consulta de MongoDB pueden hacer que el resultado sea menos evidente que una comparación sencilla entre dos valores escalares; antes de depender del comportamiento con arrays, comprueba la forma de los datos y consulta la documentación del operador. Esta guía se centra en campos escalares comunes.

Usar $ne en una consulta

En el shell de MongoDB, pasa la condición a find. Por ejemplo, db.users.find({ city: { $ne: "New York" } }) solicita los usuarios cuyo city es distinto de "New York" o no existe. Los valores de texto deben ir entre comillas y el nombre del operador empieza por $. La consulta es un filtro: no modifica los documentos que coinciden.

Si no quieres que se incluyan las ciudades ausentes, combina las condiciones: db.users.find({ city: { $ne: "New York", $exists: true } }). Así se exige explícitamente que city exista y, a la vez, se excluye el valor especificado. Adapta users, city y "New York" a la colección, el campo y el valor de tus datos.

Estas expresiones corresponden al shell de MongoDB, no son programas independientes; necesitan un servidor de MongoDB y una colección para producir resultados de la base de datos. El paquete no incluye evidencia de ejecución para este artículo, así que aquí no se afirma ningún conjunto de resultados ni salida.

Usar $ne en una actualización

Un filtro de actualización usa $ne igual que un filtro de lectura. Por ejemplo, db.users.updateMany({ city: { $ne: "New York" } }, { $set: { status: "review" } }) solicita a MongoDB que establezca status en "review" en los documentos cuyo city no es "New York" o no existe. El filtro determina qué documentos cumplen los requisitos; $set describe el cambio.

Usa el filtro con cuidado: como los documentos sin city también coinciden, esta actualización los incluye. Para excluirlos, añade city: { $ne: "New York", $exists: true } al filtro. updateMany aplica la actualización a todos los documentos que coinciden, pero la cantidad modificada puede ser menor que la cantidad encontrada; por ejemplo, quizá no sea necesario cambiar un documento que ya tenga el estado solicitado. Antes de ejecutar una actualización masiva, revisa que el filtro seleccione los registros previstos. La expresión anterior sirve como guía de sintaxis y no se ha ejecutado en una base de datos dentro de este paquete.

$ne y $not: en qué se diferencian

$ne expresa desigualdad con respecto a un valor: { status: { $ne: "closed" } } solicita un status distinto de "closed" y también coincide con documentos en los que status no existe. $not niega una expresión de operador, como en { price: { $not: { $gt: 100 } } }. En ese patrón, el $gt interno describe una comparación y $not niega esa expresión.

Elige $ne cuando la condición sea específicamente «distinto de este valor». Usa $not cuando la condición sea la negación de otra expresión de operador admitida. El comportamiento ante campos ausentes puede ser relevante para cualquiera de las dos consultas; consulta la documentación de los operadores de MongoDB si el campo puede faltar o la expresión es más compleja: ejemplos de $ne y $not.