io non sono un grande fan di utilizzare l'operatore $where
interrogazione a causa del modo in cui valuta l'espressione query e il rischio per la sicurezza se la query utilizza i dati di input dell'utente.
Detto questo, il modo migliore per farlo è $project
il tuo documento e aggiungere un altro campo calcolato che è il valore stringa del tuo numero.
Il $toLower
e il suo fratello $toUpper
rispettivamente convertono una stringa in lettere minuscole e maiuscole ma hanno una piccola funzione sconosciuta che è quella che possono essere utilizzate per convertire i numeri interi in stringa.
L'operatore $match
restituisce tutti i documenti corrispondenti al modello utilizzando l'operatore .
db.seDemo.aggregate(
[
{ "$project": {
"stringifyExample": { "$toLower": "$example" },
"example": 1
}},
{ "$match": { "stringifyExample": /^123.*/ } }
]
)
che produce:
{
"_id" : ObjectId("579c668c1c52188b56a235b7"),
"example" : 1234,
"stringifyExample" : "1234"
}
{
"_id" : ObjectId("579c66971c52188b56a235b9"),
"example" : 12334,
"stringifyExample" : "12334"
}
Ora, se quello che vuoi è di recuperare tutti i documenti che contengono una particolare stringa, il modo più facile e migliore per farlo è nel prossimo rilascio di MongoDB (al momento della stesura di questo documento) utilizzando l'operatore $redact
che consente l'elaborazione logica itional $cond
. $indexOfCP
.
db.seDemo.aggregate([
{ "$redact": {
"$cond": [
{ "$gt": [
{ "$indexOfCP": [
{ "$toLower": "$example" },
"123"
] },
-1
] },
"$$KEEP",
"$$PRUNE"
]
}}
])
che produce:
{
"_id" : ObjectId("579c668c1c52188b56a235b7"),
"example" : 1234
}
{
"_id" : ObjectId("579c66971c52188b56a235b9"),
"example" : 12334
}
Come una punta non correlata, per fare questo lavoro in PHP, è necessario passare in Array ('$ dove' => new MongoCode (/^123 * /. .test (this.example) "); –
@dalton Solo curioso qui, l'operatore regex $ non sarebbe più efficiente di $ dove? – talentedmrjones
Capito che qualcosa di simile si applicherebbe per il driver Ruby come @gary ha sottolineato ma no. Questo dovrebbe funzionare come un fascino db.test.find ("$ where" => "/^123.*/.test(this.example)") – Vivek