Оператор $where позволяет встраивать JavaScript-выражения прямо в MongoDB-запросы, но он имеет серьёзные недостатки, которые делают его непригодным для большинства production-сценариев.
$where не может использовать индексы, заставляя MongoDB выполнять полное сканирование коллекции$where выполняет произвольный JavaScript на сервере, создавая риск JavaScript-инъекций$where-выражение, может быть выполнен вредоносный кодИспользуй нативные операторы MongoDB везде, где это возможно:
$eq, $gt, $regex — они оптимизированы и поддерживают индексы$expr для сложных сравнений между полями:db.collection.find({
$expr: { $gt: ["$fieldA", "$fieldB"] }
})
$expr позволяет писать выразительную логику запросов, при этом сохраняя поддержку индексовИзбегай $where в production-коде. Отдавай предпочтение нативным операторам запросов или aggregation pipeline, чтобы получить:
Оператор $where может использовать индексы MongoDB для оптимизации производительности запросов, что делает его подходящим для больших коллекций при правильной структуре.
Новый — ещё не проверен сообществом
Вы