У меня есть коллекция
db.list.insert({ first: "apple", second: "banana" });
db.list.insert({ first: "apple", second: "tree" });
db.list.insert({ first: "orange", second: "tree" });
db.list.insert({ first: "medal", second: "sport" });
Я хочу запросить документы на основе этих двух полей и получать документы только при совпадении обоих полей.
Я пробовал следующий запрос
db.list.find(
$or: [
{ first: 'apple', second: { $in: ['tree', 'banana']}},
{ first: 'orange', second: { $in: ['tree']}}
],
).limit(5);
и добавленные индексы для
{first: 1, second: 1}
В плане запроса он генерирует такое же количество планов, что и количество предикатов в запросе "или". Имеется около 2 миллионов документов, и если он не получает свои 5 документов в первом предикате, он выбирает все документы, соответствующие всем предикатам, и время ожидания запроса истекает.
Есть ли другой эффективный способ сделать это?