Ya he visto estos mensajes:
Longitud del valor del campo de cadena en mongoDB
Seleccione la longitud de la cadena en mongodb
Pero mi problema es diferente. Cuando estoy ejecutando esta consulta:
db.usercollection.find({$where: "this.profile.name.length < 20"}).limit(2);Recibo el siguiente error:
Error: error: { "ok" : 0, "errmsg" : "TypeError: this.profile is undefined :\n_funcs2@:1:24\n", "code" : 139 }cuando estoy ejecutando esta consulta:
db.usercollection.find({"profile.name": {$exists: true}, $where: "this.profile.name.length <20"}).limit(2);Sin error, pero resultado vacío, aunque mi colección tiene 2 documentos donde profile.name<20
MongoDB shell versión: 3.2.11
Hay un documento donde la clave profile (documento incrustado) no existe, y la expresión de javascript arroja el error ya que intenta acceder a un atributo inexistente de un objeto:
db.usercollection.find({$where: "this.profile.name.length < 20"}).limit(2);
Su segunda consulta funciona bien, porque coincide con todos los documentos donde existe profile.name :
db.usercollection.find({"profile.name": {$exists: true}, $where: "this.profile.name.length <20"}).limit(2);La segunda consulta debería devolver el resultado deseado.
ese perfil.nombre se puede verificar en la cláusula where en sí
db.usercollection.find({$where: "this.profile && this.profile.name && this.profile.name.length < 20"}).limit(2);