我們試圖在排除具有以特定前綴開頭的欄位的記錄時使用索引,當使用以下內容時,未使用索引:
{"field": {"$not": {"$regex": "^abcd"}}}
并且需要很長時間才能得到結果。
但是在使用時:
{"field": {"$regex": "^abcd"}}
使用索引,我們立即得到結果!
有沒有解決的辦法?
uj5u.com熱心網友回復:
我不是專家,regex但我認為你可以這樣使用^(?!abcd):
db.collection.find({
"field": {
"$regex": "^(?!abcd)"
}
})
示例在這里
uj5u.com熱心網友回復:
如果字串只是字母數字,則可以使用不等式并完全避免使用正則運算式:
{$or: [{"field": {"$lt": "abcd"}}, {"field": {"$gt": "abcd~"}}]}
由于~大于z,該查詢將回傳所有不以該前綴開頭的值,只要~不是您正在檢查的值中的有效字符。
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/357773.html
