Docs Menu
Docs Home
/ /

$ne

$ne

$ne Selecciona documentos cuyo valor del campo no es igual al especificado. Esto incluye documentos que no contienen el campo.

Para comparar diferentes valores de tipo BSON, consulte la 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, consulte Filtro de no igualdad.

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

El siguiente ejemplo selecciona documentos en la colección inventory donde quantity no es igual a 20 e incluye 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

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.

Al comparar matrices, $ne coincide con los documentos donde la matriz de documentos difiere de la matriz especificada en $ne. Específicamente, $ne coincide con cualquier documento donde las matrices:

  • Tener diferentes valores de elementos o cadenas.

  • Tener elementos en un orden diferente.

  • Tiene 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 consulta invierte los elementos de la matriz:

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 consulta devuelve el documento nuts porque la matriz [ "hardware" ] difiere de "fasteners". La consulta también devuelve el documento washers porque este no contiene una matriz 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 }
}
]

Volver

$lte

En esta página