У меня довольно сложный запрос в проекте. Он потенциально (зависит от параметров пользователя) может иметь множество условий, которые я помещаю под операторы $and
и $or
.
Вот очень упрощенный пример:
docs.find({name:"shaq", organization: "myorg", url:{$exists:true}})
Таким образом, в случае вышеупомянутых документов, отвечающих всем , будут получены три условия. Тот же результат может быть достигнут с помощью этого кода:
docs.find({$and:[
{name:"shaq"},
{organization:"myorg"},
{url:{$exists:true}}
]})
Интересно, как это влияет на производительность. Это на самом деле то же самое, или он работает медленнее из-за дополнительного оператора, или он работает быстрее, потому что согласно официальным документам :
$and
оператор использует short-circuit оценивание означает, что если первое выражение в списке вернет false
mongo не будет оценивать оставшиеся выражения
Итак, вопрос: влияет ли размещение условий под оператором $and
на производительность? Если да, то каково влияние?
PS Я пытался исследовать результаты с помощью mongos explain()
, но он не ответил на мой вопрос, потому что мои реальные запросы огромны, в результате чего получился огромный отчет, которыйдействительно трудно анализировать.