Изобщо не би трябвало да работи в по-ранни версии, тъй като най-малкото сте променили обхвата на this
сега да се отнасяме към "данни" като елемент от най-високо ниво. Накратко, това вече не е позволено и наистина не трябва да използвате JavaScript методи, освен ако не е абсолютно необходимо. Дори тогава вероятно все още има по-добър начин в повечето случаи.
Но всъщност това е ненужно използване на съвпадение на JavaScript, тъй като не е необходимо, когато съществуват други оператори, които ще направят това.
Трябва да използвате $regex
форма вместо това:
db.docs.find({ "data.First_name": /^kim/i })
Или където и да е в полето премахнете каретката ^
:
db.docs.find({ "data.First_name": /kim/i })
Което е почти толкова неефективно, колкото изпълнението на JavaScript, но не толкова, тъй като няма режийни разходи за обработка чрез тази интерпретаторска машина. И разбира се работи навсякъде.
Също така помислете какво всъщност прави заявка, която разчита на разрешаване на JavaScript:
- Извиква екземпляр на JavaScript интерпретатор
- Преобразува типове документи BSON за всеки документ в типове JavaScript
- Оценява JavaScript кода в интерпретатора за всеки документ
- Прехвърля JavaScript
true|false
обратно като резултат на документ
Като се има предвид, че $regex
( но със съвпадение без значение за малки и големи букви, което не е оптимално ) извършва същите операции, но използва "pcre" C библиотеката естествено без преобразуване и преработване на документ, тогава това очевидно е разумният избор от двете.