Definición
$ne$neselecciona 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.
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 de $ne es nulo, consulte Filtro de no igualdad.
Ejemplos
Los siguientes ejemplos usan la colección inventory. Para crear la colección, ejecuta 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
El siguiente ejemplo selecciona los documentos en la colección inventory donde quantity no es igual a 20 e incluye los documentos que no contienen 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 price campo basándose en una $ne comparación en un campo de un documento incrustado. La operación busca un documento updateMany() incrustado,, carrier con un subcampo fee llamado. Utiliza para actualizar $set el price campo a 9.99 en cada documento donde el valor de fee no sea igual a 1 o donde el fee subcampo no exista:
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 encuentra documentos en los que el arreglo de documentos difiere del arreglo especificado en $ne. Específicamente, $ne coincide con cualquier documento en el que los arreglos:
Tener diferentes valores de elementos o strings.
Tenga los 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 } } ]
Esta query invierte los elementos del 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". La query también devuelve el documento washers porque el documento no contiene un arreglo de 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 } } ]