So erstellen Sie eine MONGODB-Abfrage, die findet, ob eine Zahl zwischen zwei Feldern liegt?
-
21-12-2019 - |
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?
Lösung
Sie möchten grundsätzlich $elemMatch
kombiniert mit einem $or
ZustandIn diesem Formular:
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.