Ответ 1
Вы можете использовать выражение JavaScript.
User.where("this.name.length >= 7 && this.name.length <= 14")
У меня есть несколько документов в коллекции MongoDB с полем "name" (которое является строкой).
Как я могу выполнять такие запросы, как 7 <= name.length <= 14
Вы можете использовать выражение JavaScript.
User.where("this.name.length >= 7 && this.name.length <= 14")
Mongo предоставляет несколько способов выполнения запроса с критериями длины - $where
или $regex
- два больших варианта, однако я бы рекомендовал использовать $regex
из-за лучшей производительности запросов.
$where
(медленнее)Пример:
db.collection.find({ $where: 'this.name.length >= 7 && this.name.length <= 14' })
Примечание. Оператор $where
не будет использовать ваши индексы базы данных, что приводит к значительно более медленному запросу. - Источник
$regex
(быстрее)Пример:
db.collection.find({ name: { $regex: /^.{7,14}$/ } })
Примечание. Оператор $regex
будет использовать ваши индексы базы данных, что приводит к гораздо более быстрому запросу (если ваша коллекция индексируется должным образом). - Источник
Вы можете использовать MongoDB $, где параметр запроса для отправки javascript на сервер.. Например,
db.myCollection.find( {$where: "(7 <= this.name.length) && (this.name.length <= 14)"} )
$where
запросы не очень эффективны. MongoDB
Если это часто выполняемый запрос, вы можете захотеть сохранить длину в отдельном поле. Denormalization