У меня есть несколько документов в коллекции MongoDB с полем "name" (которое является строкой).
Как я могу выполнять такие запросы, как 7 <= 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