Si queremos hacer una consulta en MongoDB para obtener los resultados que no cumplan una condición vamos a tener que recurrir a una consulta MongoDB Not Equal. Y el operador que representa el MongoDB Not Equal es $ne.
Vamos a ver como utilizar el operador $ne en una consulta MongoDB. Si recordamos, las consultas en MongoDB se consiguen mediante el método .find() y los filtros se presentan mediante un documento JSON como parámetro del método .find(). Es por ello que para conseguir una sentencia de MongoDB Not Equal vamos a utilizar el operador $ne dentro del documento que pasemos al método .find().
Partiremos de una consulta afirmativa antes de aplicar un MongoDB Not Equal. Los datos sobre los que nos basamos son nuestra conocida colección de ciudades:
{ "_id" : ObjectId("525ab02733b01a66a9dcbc5b"), "ciudad" : "Madrid", "habitantes" : 3233527 } { "_id" : ObjectId("525ab02733b01a66a9dcbc5c"), "ciudad" : "Barcelona", "habitantes" : 1620943 } { "_id" : ObjectId("525ab02733b01a66a9dcbc5d"), "ciudad" : "Valencia", "habitantes" : 797028 } { "_id" : ObjectId("525ab02733b01a66a9dcbc5e"), "ciudad" : "Sevilla", "habitantes" : 702355 } { "_id" : ObjectId("525ab02733b01a66a9dcbc5f"), "ciudad" : "Zaragoza", "habitantes" : 679624 }
Si queremos recuperar los datos de Madrid escribiremos lo siguiente:
cursor = db.ciudades.find({ciudad:'Madrid'});
Ahora vamos a consultar aquellas ciudades que no sean Madrid. Para ello utilizamos el operador $ne. El operador $ne se aplica sobre el contenido:
{$ne: 'Madrid}
Por lo cual, si este lo queremos aplicar sobre un campo, veremos que el documento JSON que representa nuestra consulta MongoDB Not Equal llevará un documento anidado. El JSON que lo representa es:
{ciudad:{$ne: 'Madrid}}
Vemos que el valor que aplicamos al campo ciudad es otro documento JSON con el operador MongoDB Not Equal $ne.
cursor = db.ciudades.find({ciudad:{$ne: 'Madrid}});
El código MongoDB que nos quedará será el siguiente:
conn = new Mongo();
db = conn.getDB("demografia");
cursor = db.ciudades.find({ciudad:{$ne:'Madrid'}});
while (cursor.hasNext()) {
printjson(cursor.next());
}