3 Stimmen

PHP - Mongo - $oder

Ich verwende PHP/Mongo, um einen Datensatz wie den folgenden abzufragen:

{
  description:
  {
    0:
      {level: (some int 0-50)},
    1:
      {level: (some int 0-50)},

  ...

    n:
      {level: (some int 0-50)}
   }
 }

Wie schreibe ich die Funktion, in php, die eine dynamische Abfrage, die für eine Ebene 40 und höher sucht, mit $oder und basierend auf der Anzahl der Beschreibung Tasten (0 ... n) bauen wird?

Was ich derzeit für eine manuelle Abfrage habe, funktioniert nicht (ich habe das Gefühl, dass es daran liegt, dass in einigen Einträgen description.1, 2, 3 nicht existieren):

find("$or":{"description.0.level":[40,41,42,43,44,45,46,47,48,49,50],"description.1.level":[40,41,42,43,44,45,46,47,48,49,50],"description.2.level":[40,41,42,43,44,45,46,47,48,49,50],"description.3.level":[40,41,42,43,44,45,46,47,48,49,50]}})

Ich erhalte eine Fehlermeldung:

Fataler Fehler: Ungefangene Ausnahme 'MongoCursorException' mit der Meldung '$and/$or/$nor must be a nonempty array'

Ich brauche also eine Funktion, die die Abfrage dynamisch erstellt und funktioniert :).

6voto

stew Punkte 491

En $or Der Wert der Abfrage selbst sollte ein Array sein. {$or : [...]}

Bitte beachten Sie das Standardbeispiel in der MongoDB-Dokumentation .

Wahrscheinlich werden Sie auch einen Operator verwenden wollen, z. B. $in (ou $lt y $gt in Kombination), um auszuwählen, welche Beschreibungsebene Sie interessiert, anstatt jeden Wert aufzuzählen.

3voto

James Huckabone Punkte 593

Für diejenigen, die es interessiert, hier ist mein endgültiger Code für dieses Problem (funktioniert).

$y = 0;
$descriptionLevels = 10; // set to 'n' levels as needed ...
while($y < $descriptionLevels){
    $filter['$or'][]['description.' . $y . '.level']['$in'] = range($startLevel, $endLevel);
    $y++;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X