Translate

viernes, 14 de junio de 2013

MongoDB: Hacer una query sobre campos del propio documento

La problemática de hoy surge porque me he visto en la necesidad de ver si dos campos de un mismo documento de mongoDb son iguales.

Para ello lo que necesito es hacer una query buscando el contenido de uno de los campos del documento en otro.

En mi caso tengo que recuperar los documentos de la tabla de usuarios donde el username sea igual a email de contacto.

{
  "_id" : "6006491b-04cc-45be-82cb-5612395d2d10",
  "username" : "xxxx@xxx.com",
  "password" : "xxxxxxx",
  "name" : "Manuel",
  "surname" : "Roberto Del Pino",
  "email" : "xxxx@xxx.com",
  "dni" : "",
  "phone" : "",
  "creationDate" : ISODate("2013-02-15T12:22:29.476Z"),
  "activated" : true,
  "deleted" : false,
  "address" : "",
  "city" : "",
  "province" : "",
  "postalCode" : "",
  "country" : "",
  "activationDate" : ISODate("2013-02-15T12:22:29.476Z")
}

Para ello se puede utilizar la siguiente query usando la clausila $where con una instrucción en javascript.

 {$where:"this.email == this.username"}

El resultado de la ejecución será más lento de lo habitual porque en motor de javascript entra en funcionamiento.

No es recomendable para coleccione con muchos documentos.

Referencia:
Mongodb query with fields in the same documents