Ich bin kein großer Fan der Verwendung der $where
Abfrage Betreiber wegen der Art und Weise des Abfrageausdruck und das Sicherheitsrisiko bewertet, wenn die Abfrage von Benutzereingaben Daten verwendet.
Dies ist der beste Weg, dies zu tun ist $project
Ihr Dokument und fügen Sie ein anderes berechnetes Feld, das ist der String-Wert Ihrer Nummer.
Die $toLower
und seine Schwester $toUpper
Operatoren jeweils eine Zeichenfolge in Klein- und Großbuchstaben konvertieren, aber haben ein wenig unbekannte Funktion, die das ist, können sie verwendet werden, um Integer in String zu konvertieren.
Der Operator $match
gibt alle Dokumente zurück, die mit dem Operator $regex
übereinstimmen.
db.seDemo.aggregate(
[
{ "$project": {
"stringifyExample": { "$toLower": "$example" },
"example": 1
}},
{ "$match": { "stringifyExample": /^123.*/ } }
]
)
, die ergibt:
{
"_id" : ObjectId("579c668c1c52188b56a235b7"),
"example" : 1234,
"stringifyExample" : "1234"
}
{
"_id" : ObjectId("579c66971c52188b56a235b9"),
"example" : 12334,
"stringifyExample" : "12334"
}
Nun, wenn, was Sie wollen, ist all das Dokument abgerufen werden, die eine bestimmte Zeichenkette enthält, die leichten und besseren Weg, dies zu tun, ist in der bevorstehenden Veröffentlichung von MongoDB (zum jetzigen Zeitpunkt) unter Verwendung des $redact
Operators, der eine $cond
logische Verarbeitung zulässt. $indexOfCP
.
db.seDemo.aggregate([
{ "$redact": {
"$cond": [
{ "$gt": [
{ "$indexOfCP": [
{ "$toLower": "$example" },
"123"
] },
-1
] },
"$$KEEP",
"$$PRUNE"
]
}}
])
, die produziert:
{
"_id" : ObjectId("579c668c1c52188b56a235b7"),
"example" : 1234
}
{
"_id" : ObjectId("579c66971c52188b56a235b9"),
"example" : 12334
}
Als unabhängige Spitze, macht diese Arbeit in PHP, müssen Sie passieren in Array ('$, wo' => neuen MongoCode (/^123 * /. .test (this.example) "); –
@dalton Nur neugierig hier, wäre der $ regex-Operator nicht effizienter als $ wo? – talentedmrjones
Es stellte sich heraus, dass etwas Ähnliches für den Ruby-Treiber gelten würde, wie @gary darauf hinwies, aber nein. Dies sollte wie ein charm funktionieren. Db.test.find ("$ where" => "/^123.*/.test(this.example)") – Vivek