我不使用的,因爲它計算的查詢表達式,如果查詢使用用戶輸入數據的安全風險的方式$where
查詢經營者的忠實粉絲。
這就是說,最好的方法是對你的文檔$project
添加另一個計算字段,它是你的數字的字符串值。
$toLower
和他的兄弟$toUpper
分別將字符串轉換爲小寫字母和大寫字母,但有一個未知的特徵,它可以用來將整數轉換爲字符串。
$match
運算符使用$regex
運算符返回所有與您的模式相匹配的文檔。
db.seDemo.aggregate(
[
{ "$project": {
"stringifyExample": { "$toLower": "$example" },
"example": 1
}},
{ "$match": { "stringifyExample": /^123.*/ } }
]
)
這將產生:
{
"_id" : ObjectId("579c668c1c52188b56a235b7"),
"example" : 1234,
"stringifyExample" : "1234"
}
{
"_id" : ObjectId("579c66971c52188b56a235b9"),
"example" : 12334,
"stringifyExample" : "12334"
}
現在,如果你想要的是檢索所有包含特定字符串時,更容易和更好的方式做文檔,這是在即將發佈MongoDB(撰寫本文時)使用允許邏輯處理的$redact
運算符。 $indexOfCP
。
db.seDemo.aggregate([
{ "$redact": {
"$cond": [
{ "$gt": [
{ "$indexOfCP": [
{ "$toLower": "$example" },
"123"
] },
-1
] },
"$$KEEP",
"$$PRUNE"
]
}}
])
其產生:
{
"_id" : ObjectId("579c668c1c52188b56a235b7"),
"example" : 1234
}
{
"_id" : ObjectId("579c66971c52188b56a235b9"),
"example" : 12334
}
作爲一個無關尖端,以使在PHP這項工作,需要在陣列通過( '$其中'=>新MongoCode(/^123 * /。 .test(this.example)「); – 2010-05-28 00:37:33
@dalton只是好奇在這裏,$ regex操作符不會比$更有效嗎? – talentedmrjones 2011-10-17 20:32:18
認爲類似的東西應該適用於Ruby驅動程序,正如@gary指出的那樣,但不是。這應該像一個魅力db.test.find(「$ where」=>「/^123.*/.test(this.example)」) – Vivek 2012-08-22 18:41:40