Tengo una consulta para realizar una búsqueda en profundidad de una expresión regular en mongoDB. Estoy usando la función JS dentro de la consulta de esta manera:
db.collection.find( {$where: function() { function deepIterate(obj, value) { var new_value = new RegExp("^"+value, "i"); for (var field in obj) { if (obj[field] == new_value){ return true; } var found = false; if ( typeof obj[field] === 'object' ) { found = deepIterate(obj[field], new_value) if (found) { return true; } } } return false; }; return deepIterate(this, "[A-Ba-b0-9]*60.51[A-Ba-b0-9]*") }} ) No devuelve ningún valor, la salida se Fetched 0 record(s) in 4ms . Pero tengo una cadena en mi base de datos: 192.108.60.51 . Ese registro no está siendo devuelto. ¡¡¡Ayuda!!!
Puede cambiar su patrón de expresiones regulares a deepIterate(this, "(([1-9]?\\d|1\\d\\d|2[0-5][0-5]|2[0-4]\\d)\\.){3}([1-9]?\\d|1\\d\\d|2[0-5][0-5]|2[0-4]\\d)$") esta expresión regular es para encontrar una cadena que sea una dirección IP. No puede encontrar ningún registro porque su patrón de expresiones regulares no coincide con su registro en la base de datos
Descubrí la solución -
db.collection.find({$where: function() { function deepIterate(obj, value) { new_value = new RegExp(value, 'i'); for (var field in obj) { if (new_value.test(obj[field])){ return true; } var found = false; if ( typeof obj[field] === 'object' ) { found = deepIterate(obj[field], new_value) if (found) { return true; } } } return false; }; return deepIterate(this, "[A-Ba-b0-9]*60.51[A-Ba-b0-9]*") }})