Найти значение внутри коллекции в мангусте из вложенного json

Предположим, у меня есть данные, хранящиеся в коллекции Учитель как:

{
    "name":"john",
    "age":45,
    "class_access":{
        1234:"head",
        1235:"head
    },
    "_id" : ObjectId("12312312"),
}

{
    "name":"henry",
    "age":55,
    "class_access":{
        1234:"head",
    },
    "_id" : ObjectId("sdf9991"),
}

{
    "name":"travis",
    "age":35,
    "class_access":{
        2341:"head",
    },
    "_id" : ObjectId("sas21"),
}

Я хочу найти всю информацию обо всех учителях, принадлежащих к классу 1234.

Для этого я попробовал:

 const TeacherDetails = await Teacher.find({ class_access: {1234:"head"} })

Но ничего не возвращает. Итак, как я могу получить доступ к вложенному json, чтобы получить все подробности?

Если кому-то понадобится дополнительная информация, дайте мне знать.

Согласно решению, предоставленному г-ном Арифом const TeacherDetails = await Teacher.find ({class_access.1234: head});

Значение класса поддержки не является постоянным, скажем, я получаю его из переменной

const className = 1234

Теперь, если я попытаюсь получить className, это даст синтаксическую ошибку, я попробовал выполнить синтаксическую ошибку для всех из них

const TeacherDetails = ждать Teacher.find ({class_access.className: head});

const TeacherDetails = ждать Teacher.find ({class_access [className]: head});

const TeacherDetails = ожидание Teacher.find ({'class_access. +' $ {className} ': head});

Итак, как мы можем делать это динамически?


person Siva Pradhan    schedule 16.03.2021    source источник


Ответы (1)


Поскольку class_access представляет объект, который может иметь несколько ключей, вы должны попробовать

Вы можете использовать [variableName] как ключ, как показано ниже

метод 1. Использование строкового шаблона

const className = 1234
const TeacherDetails = await Teacher.find({ [`class_access.${className }`]: "head" });

метод 2. Использование конкатенации строк

const className = 1234
const classAccess = 'class_access.' + className;
const TeacherDetails = await Teacher.find({ [classAccess] : "head" });
person Arif Khan    schedule 16.03.2021
comment
Спасибо за ответ, я отредактировал вопрос, не могли бы вы посмотреть. Поскольку это не удовлетворяет мое использование - person Siva Pradhan; 16.03.2021
comment
@SivaPradhan проверьте обновленный ответ, надеюсь, это поможет вам - person Arif Khan; 16.03.2021