->Proszę zobaczyć aktualizacje na dole, mam ten sam problem replikowane w Mongo shellphp Mongo znaleźć wykorzystać tylko 4 kryteria
moich kryteriów jest przekazywane za pośrednictwem parametrów GET i zostaje umieszczony w $ dane (jako tablica assc). Następnie przechodzi do sekcji poniżej, gdzie każde wyszukiwane hasło staje się częściowe, a nie dokładne. Następnie usuwamy (usuwamy) puste kryteria.
Łącznie istnieje 15 pól, w których można ustawić co najmniej 1 i co najwyżej 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);
Wszystko działa słodki jak długo minęło charakterystyczne są 4 lub mniej jak:
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)
)
zwraca Ten 5 wyników.
Jednak wszystkie kryteria dodane po czwartym są nieskuteczne.
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)
)
ten powinien powrócić 2 ale nadal zwraca 5 i powróci 5 Nie ważne ile kryteria pozycje są dodawane
- Aktualizacja -
Więc próbowałem go w Shell i ku mojemu zdziwieniu też tam nie działa.
db.property_list.find({phone:/433/, property_name:/west/, city:/h/, zip_postcode:/9/}).count()
zwraca 5
Teraz po dodaniu 5th parametr powinien zawęzić wyniki do 2 ale jest nieskuteczny i nadal wykazują rachubę jako 5 !!!
db.property_list.find({phone:/433/, property_name:/west/, city:/h/, zip_postcode:/9/, state_province:/Virginia/}).count()
zwraca 5
Z wielu doświadczeń, zdałem sobie sprawę, że jest tylko pierwsze 4 Kryteria czym podniósł !! Tak jakby w ostatnim przykładzie zmieniłem miejsce na 'state_province'
i 'city'
będzie to kryterium "miasta", które będzie nieskuteczne, ponieważ będzie to 5 kryterium!
- Nowa aktualizacja -
Okazuje się, jeśli mogę użyć zamiast normalnego meczu regex na 5 kryteriów będzie działać. Czy mam rację, zakładając, że Mongo może znaleźć find() tylko dla 4 kryteriów wyrażeń regularnych? Więc to poprawnie zwraca 1
db.property_list.find({phone:/433/, property_name:/west/, city:/h/, zip_postcode:/9/, state_province:Virginia}).count()
Czy to samo dzieje się, jeśli po prostu masz "state_province"?Czy możesz powtórzyć to w powłoce Mongo? – Derick
Hej, Derick, dziękuję za odpowiedź, próbowałem go również w powłoce Mongo i ku mojemu zdziwieniu wciąż ten sam problem ... Jestem prawie pewien, że Mongo nie ogranicza kryteriów regex do 4? !! – Zoheir