Ricerca Rego MongoDB sul valore intero

Voglio regex cercare un valore intero in MongoDB. È ansible?

Sto costruendo un’interfaccia di tipo CRUD che consente * ai caratteri jolly nei vari campi. Sto cercando di mantenere l’interfaccia utente coerente per alcuni campi che sono interi.

Prendere in considerazione:

> db.seDemo.insert({ "example" : 1234 }); > db.seDemo.find({ "example" : 1234 }); { "_id" : ObjectId("4bfc2bfea2004adae015220a"), "example" : 1234 } > db.seDemo.find({ "example" : /^123.*/ }); > 

Come puoi vedere, inserisco un object e sono in grado di trovarlo in base al valore. Se provo una regex semplice, non riesco a trovare l’object.

Grazie!

Se vuoi fare un pattern match sui numeri, il modo di farlo in mongo è usare l’espressione $ where e passare una corrispondenza di pattern.

 > db.test.find({ $where: "/^123.*/.test(this.example)" }) { "_id" : ObjectId("4bfc3187fec861325f34b132"), "example" : 1234 } 

Non sono un grande fan dell’uso dell’operatore di query $where al modo in cui valuta l’espressione della 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 tuo documento e aggiungere un altro campo calcolato che è il valore stringa del tuo numero.

Gli $toLower e il suo fratello $toUpper convertono rispettivamente una stringa in lettere minuscole e maiuscole, ma hanno una piccola caratteristica sconosciuta, che può essere usata per convertire interi in stringa.

L’operatore $match restituisce tutti quei documenti che corrispondono al tuo pattern usando l’operatore $regex .

 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 è recuperare tutto il documento che contiene una sottostringa particolare, il modo più facile e migliore per farlo è nella prossima versione di MongoDB (al momento della stesura di questo) usando l’operatore $redact che permette un’elaborazione logica $cond itional . $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 }