Запрос MongoDB с критериями длины

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

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

Ответы

Ответ 1

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

User.where("this.name.length >= 7 && this.name.length <= 14")

Ответ 2

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

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

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