【问题标题】:Find value inside a collection in mongoose from nested json从嵌套的json中查找mongoose集合中的值
【发布时间】:2021-06-13 11:19:57
【问题描述】:

假设我将数据存储在集合 Teacher 中:

{
    "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 以获取所有详细信息?

如果有人需要任何进一步的信息,请告诉我。

根据 Arif 先生提供的解决方案 const TeacherDetails = await Teacher.find({ "class_access.1234": "head" });

支持类值不是恒定的,说我是从变量中获取的

const className = 1234

现在,如果我尝试获取 className,它会给出语法错误,我尝试对所有这些都进行以下语法错误

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

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

const TeacherDetails = await Teacher.find({ 'class_access.+'${className}': "head" });

那么我们如何动态地做到这一点呢?

【问题讨论】:

    标签: node.js mongodb mongoose mongoose-schema


    【解决方案1】:

    由于class_access 代表可能有多个键的对象,你应该尝试一下

    您可以使用[variableName] 作为键,如下所示

    方法一:使用字符串模板

    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" });
    

    【讨论】:

    • 谢谢您的回答,我已经编辑了问题,请您看看。因为它不能满足我的使用需求
    • @SivaPradhan 检查更新后的答案,希望对您有所帮助
    猜你喜欢
    • 1970-01-01
    • 2017-12-19
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 2022-01-26
    • 2016-04-30
    相关资源
    最近更新 更多