Frage

Die Objekte in der Datenbank verfügen über ein Array 'Eigenschaften', das verschiedene Objekte enthalten kann.Einige von ihnen präsentieren Zahlen oder Bereiche und sehen aus wie:

generasacodicetagpre.

oder

generasacodicetagpre.

Wenn Sie die Sammlung für eine bestimmte Nummer abfragen, wie x, möchte ich alle Dokumente finden, in denen der Wert entweder x oder minValue <= x <= maxvalue ist.Mein erster Versuch einer Abfrage sieht aus wie

generasacodicetagpre.

Der Nachteil ist, dass, wenn das Eigenschaftenarray mehrere Objekte enthält, die MinValue und MAXVALUE angeben, X zwischen einem von ihnen liegen.Zum Beispiel

generasacodicetagpre.

übereinstimmt mit x= 8. Kann die Abfrage verbessert werden, sodass die Objektstruktur innerhalb der Eigenschaften respektiert wird?

War es hilfreich?

Lösung

Sie möchten grundsätzlich $elemMatch kombiniert mit einem $or ZustandIn diesem Formular:

generasacodicetagpre.

das deckt ab, der die Dokumente erfüllt, die den Bereich enthalten, sowie den möglichen anderen Schlüsselnamen für das Feld in Eigenschaften.

Beachten Sie jedoch, dass passende Dokumente sich auf passende Elemente in einem Array unterscheiden.Wenn Sie also nur erwarten, dass die Array-Elemente, die übereinstimmen, zurückzusetzen, und Sie mehr als eins haben, verwenden Sie das Aggregatformular:

generasacodicetagpre.

Wenn jedoch nur eine Übereinstimmung vorhanden ist, die Sie sich sicher sind, dass Sie sich dann einfach Projektion mit Find verwenden:

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top