->Por favor ver las actualizaciones en la parte inferior, que he reproducido la misma cuestión en Mongo cáscaraphp Mongo encontrar sólo utilizar 4 criterios
Mis criterios se está pasando a través de parámetros GET y se guarde dentro $ de datos (como una matriz assc). Luego llega a la sección de abajo, donde cada término de búsqueda se convierte en parcial, no coincidencia exacta. Después de eso eliminamos (desarmamos) los criterios vacíos.
En total hay 15 campos posibles que pueden configurarse al menos 1 y como máximo todos los 15.
foreach ($data as $k => $v) {
// Make them partial match
$data[$k] = new MongoRegex('/'.$v.'/i');
// Remove empty criteria
if (empty($v)) unset($data[$k]);
}
// Run the search
$cursor = $this->collection->find($data);
Todo funciona dulce, siempre y cuando pasaron criterios son 4 o menos como:
Array (
[phone] => MongoRegex Object ([regex] => 433 [flags] => i)
[property_name] => MongoRegex Object ([regex] => west [flags] => i)
[city] => MongoRegex Object ([regex] => H [flags] => i)
[zip_postcode] => MongoRegex Object ([regex] => 9 [flags] => i)
)
Esto devuelve 5 resultados.
Pero cualquier criterio agregado después del 4to es ineficaz.
Array (
[phone] => MongoRegex Object ([regex] => 433 [flags] => i)
[state_province] => MongoRegex Object ([regex] => Virginia [flags] => i)
[property_name] => MongoRegex Object ([regex] => west [flags] => i)
[city] => MongoRegex Object ([regex] => H [flags] => i)
[zip_postcode] => MongoRegex Object ([regex] => 9 [flags] => i)
)
Esto debería devolver 2, pero sigue devolviendo 5 y volverá 5 no importa cuántos artículos se añaden criterios
- actualización -
Así que lo han intentado en el Shell y para mi sorpresa, tampoco funciona allí.
db.property_list.find({phone:/433/, property_name:/west/, city:/h/, zip_postcode:/9/}).count()
retornos 5
Ahora cuando agrego el quinto parámetro debería limitar los resultados a 2 pero es ineficaz y todavía muestran cuentan como 5 !!!
db.property_list.find({phone:/433/, property_name:/west/, city:/h/, zip_postcode:/9/, state_province:/Virginia/}).count()
retornos 5
Con una gran cantidad de experimentos, me di cuenta de que es sólo los 4 primeros criterios de ser recogido !! Como si en el último ejemplo cambiara el lugar por 'state_province'
y 'city'
, será un criterio de "ciudad" que será ineficaz ya que será el quinto criterio.
- Nueva actualización -
Resulta que si uso partido normal en vez de expresiones regulares en los criterios de 5to va a trabajar. ¿Estoy en lo cierto al suponer que Mongo puede hacer find() solo para 4 criterios regex? por lo que esto correctamente devuelve 1
db.property_list.find({phone:/433/, property_name:/west/, city:/h/, zip_postcode:/9/, state_province:Virginia}).count()
¿Ocurre lo mismo si solo tiene "state_province"?¿Puedes replicar esto en el caparazón de Mongo? – Derick
Hola, Derick, gracias por tu respuesta. Lo he probado también en el shell de Mongo y, para mi sorpresa, sigue el mismo problema ... ¡Estoy casi seguro de que Mongo no está restringiendo los criterios de expresión regular a 4! – Zoheir