Запрос MongoDB с критериями длины - PullRequest
13 голосов
/ 10 февраля 2011

У меня есть несколько документов в коллекции MongoDB с полем 'name' (которое является строкой).

Как я могу выполнять такие запросы, как 7 <= name.length <= 14

Ответы [ 4 ]

13 голосов
/ 10 февраля 2011

Вы можете использовать выражение JavaScript .

User.where("this.name.length >= 7 && this.name.length <= 14")
12 голосов
/ 27 мая 2015

Mongo предоставляет несколько способов выполнить запрос с критериями длины - $where или $regex - два отличных варианта, однако я бы рекомендовал использовать $regex из-за лучшей производительности запроса.


$where (медленнее)

Принимает либо выражение JavaScript, либо функцию в запросах

Пример:

db.collection.find({ $where: 'this.name.length >= 7 && this.name.length <= 14' })

Примечание: оператор $where не будет использовать ваши индексы базы данных, что приведет к гораздо более медленному запросу.- Источник


$regex (быстрее)

Предоставляет возможности регулярных выражений для шаблонасоответствующие строки в запросах

Пример:

db.collection.find({ name: { $regex: /^.{7,14}$/ } })

Примечание. Оператор $regex использует преимущества индексов вашей базы данных, что приводит к гораздо более быстрому результату.запрос (если ваша коллекция проиндексирована правильно).- Источник

4 голосов
/ 10 февраля 2011

Вы можете использовать параметр запроса $ где MongoDB для отправки javascript на сервер.Например:

db.myCollection.find( {$where: "(7 <= this.name.length) && (this.name.length <= 14)"} )

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-JavascriptExpressionsand%7B%7B%24where%7D%7D

0 голосов
/ 14 апреля 2012

$where запросы не очень эффективны. MongoDB

Если это часто выполняемый запрос, вы можете сохранить длину в отдельном поле. Денормализация

...