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 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.
Arreglos
Al comparar arreglos, $ne coincide con documentos donde la matriz de documentos difiere del arreglo especificado en $ne. Específicamente, $ne coincide con cualquiera de estos documentos donde los arreglos:
tiene valores de elementos o cadenas diferentes
tiene elementos en un orden diferente
tener un número diferente de elementos
faltan en un documento
Por ejemplo, la siguiente query devuelve documentos inventory en los que el arreglo type difiere de [ "hardware", "fasteners" ]:
db.inventory.find( { type: { $ne: [ "hardware", "fasteners" ] } } )
El siguiente ejemplo completo añade un arreglo de type a dos documentos de inventory y ejecuta una query con $ne:
// Update the nuts document to include a type array db.inventory.updateOne( { item: "nuts" }, { $set: { type: [ "hardware" ] } } ) // Update the bolts document to include a type array db.inventory.updateOne( { item: "bolts" }, { $set: { type: [ "hardware", "fasteners" ] } } ) // Find documents where the type array differs from [ "hardware", "fasteners" ] db.inventory.find( { type: { $ne: [ "hardware", "fasteners" ] } } )
El resultado muestra el documento nuts porque el arreglo difiere de [
"hardware", "fasteners" ], y el documento washers porque no tiene un arreglo type:
[ { _id: ObjectId('679d26907c5a58595234305c'), item: 'nuts', quantity: 30, carrier: { name: 'Shipit', fee: 3 }, type: [ 'hardware' ] }, { _id: ObjectId('679d26907c5a58595234305e'), item: 'washers', quantity: 10, carrier: { name: 'Shipit', fee: 1 } } ]
La siguiente query invierte los elementos en el arreglo:
db.inventory.find( { type: { $ne: [ "fasteners", "hardware" ] } } )
Debido a que el arreglo type en el documento bolts es [ "hardware",
"fasteners" ], lo cual difiere de [ "fasteners", "hardware" ], la query devuelve el documento bolts además de los documentos nuts y washers:
[ { _id: ObjectId('679d26907c5a58595234305c'), item: 'nuts', quantity: 30, carrier: { name: 'Shipit', fee: 3 }, type: [ 'hardware' ] }, { _id: ObjectId('679d26907c5a58595234305d'), item: 'bolts', quantity: 50, carrier: { name: 'Shipit', fee: 4 }, type: [ 'hardware', 'fasteners' ] }, { _id: ObjectId('679d26907c5a58595234305e'), item: 'washers', quantity: 10, carrier: { name: 'Shipit', fee: 1 } } ]
$ne coincide con los documentos donde el arreglo no contiene el valor especificado y con los documentos que no tienen el arreglo. Por ejemplo:
db.inventory.find( { type: { $ne: "fasteners" } } )
La query devuelve el documento nuts porque el arreglo [ "hardware"
] difiere de "fasteners". Además, la query devuelve el documento washers porque el documento no tiene un arreglo type. Salida de la query:
[ { _id: ObjectId('679d26907c5a58595234305c'), item: 'nuts', quantity: 30, carrier: { name: 'Shipit', fee: 3 }, type: [ 'hardware' ] }, { _id: ObjectId('679d26907c5a58595234305e'), item: 'washers', quantity: 10, carrier: { name: 'Shipit', fee: 1 } } ]