Definición
$ne$neselecciona los documentos donde el valor del campo especificado no es igual al valor indicado. Esto incluye documentos que no contienen el campo especificado.Para comparar diferentes valores de tipo BSON, consulte la orden de comparación BSON especificado.
Compatibilidad
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.
Sintaxis
El operador $ne tiene el siguiente formato:
{ field: { $ne: value } }
Nota
Si el valor del operador $ne es nulo, consulta Filtro de no igualdad para obtener más información.
Ejemplos
Los siguientes ejemplos utilizan la colección inventory. Para crear la colección, se debe ajustar el siguiente comando insertMany() en mongosh:
db.inventory.insertMany( [ { "item": "nuts", "quantity": 30, "carrier": { "name": "Shipit", "fee": 3 } }, { "item": "bolts", "quantity": 50, "carrier": { "name": "Shipit", "fee": 4 } }, { "item": "washers", "quantity": 10, "carrier": { "name": "Shipit", "fee": 1 } } ] )
Filtrar documentos por campos que no coinciden con un valor
Selecciona todos los documentos en la colección inventory en los que quantity no sea igual a 20. Esta query también selecciona documentos que no tienen el campo quantity:
db.inventory.find( { quantity: { $ne: 20 } } )
{ _id: ObjectId("61ba667dfe687fce2f042420"), item: 'nuts', quantity: 30, carrier: { name: 'Shipit', fee: 3 } }, { _id: ObjectId("61ba667dfe687fce2f042421"), item: 'bolts', quantity: 50, carrier: { name: 'Shipit', fee: 4 } }, { _id: ObjectId("61ba667dfe687fce2f042422"), item: 'washers', quantity: 10, carrier: { name: 'Shipit', fee: 1 } }
El equivalente en SQL para esta query es:
SELECT * FROM INVENTORY WHERE QUANTITIY != 20
Actualización basada en campos de documentos incrustados que no son iguales
El siguiente ejemplo establece el campo price 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, carrier, con un subcampo llamado fee. Utiliza $set para actualizar el campo price a 9.99 en cada documento donde fee tiene un valor que no es igual a 1 o donde el subcampo fee no existe:
db.inventory.updateMany( { "carrier.fee" : { $ne: 1 } }, { $set: { "price": 9.99 } } )
{ _id: ObjectId("61ba66e2fe687fce2f042423"), item: 'nuts', quantity: 30, carrier: { name: 'Shipit', fee: 3 }, price: 9.99 }, { _id: ObjectId("61ba66e2fe687fce2f042424"), item: 'bolts', quantity: 50, carrier: { name: 'Shipit', fee: 4 }, price: 9.99 }, { _id: ObjectId("61ba66e2fe687fce2f042425"), item: 'washers', quantity: 10, carrier: { name: 'Shipit', fee: 1 } }
El equivalente en SQL para esta query es:
UPDATE INVENTORY SET PRICE = '9.99' WHERE carrierfee != 1
El operador de $ne desigualdad no es muy selectivo, ya que suele coincidir con una gran parte del índice. Por lo tanto, en muchos casos, una $ne consulta con un índice puede no tener un mejor rendimiento que una $ne consulta que debe analizar todos los documentos de una colección. Véase también Selectividad de consultas.