MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

$elemmatch не работи в MongoDB

Изобщо не би трябвало да работи в по-ранни версии, тъй като най-малкото сте променили обхвата на 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 библиотеката естествено без преобразуване и преработване на документ, тогава това очевидно е разумният избор от двете.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Филтрирайте базата данни на mongodb с помощта на mongoose nodejs

  2. твърде много отворени файлове в сървъра mgo go

  3. Какво се връща от заявка на Mongoose, която не намира съвпадения?

  4. Как да изпълнявам монго команди чрез скриптове на шел?

  5. Как да премахнете поле от документ на MongoDB ($unset)