Скажем, у меня есть два документаМонго: можно удовлетворить «и» условие по двум документам
/*1*/
{
"id":1,
"name":"natty",
"subject_enrolled":"english"
}
/*2*/
{
"id":2,
"name":"natty",
"subject_enrolled":"science"
}
В идеале, он должен был тот же документ, с subject_enrolled быть массивом, имеющим как предметы. Но по какой-то причине я сохранил данные, подобные этому. Теперь я хочу написать запрос, который будет извлекать всех студентов, которые зарегистрировались как для «английского», так и «научного».
Я попытался ниже запрос:
db.students.find({"subject_enrolled":{"$in":["science", "english"]}})
Но это не так, сог, если любой студент, который зарегистрирован только для науки также будет в результате. Я не могу использовать «$ all», так как наука и английский находятся в двух разных документах.
Есть ли способ достичь этого легко и эффективно?
Поскольку в mongo нет объединений, вы не можете сделать прямой запрос для него. Как насчет использования структуры агрегации ?. Группируйте по id, используйте $ addToSet, чтобы добавить все темы, а затем использовать фазу соответствия с $ all? –
@ Ишань Сони Спасибо Ишану за тебя. Да. Я попробовал агрегацию. Я дал запрос, который я попробовал ниже. Но я беспокоюсь о производительности. Есть ли другой способ? – Nattyk
Я не могу думать об этом иначе. Подождите, пока другие ответят, тем временем остерегайтесь некоторых ограничений конвейера агрегации. https://docs.mongodb.com/manual/core/aggregation-pipeline-limits/#result-size-restrictions –