json - 如何使用node.js仅获取嵌套JSON对象MongoDB的数据

标签 json node.js mongodb

我的 MONGODB 中有一个 JSON 对象

{
"_id" : ObjectId("59d4b9848621854d8fb2b1e1"),
"Bot_name" : "Scheduling bot",
"Modules" : [ 
    {
        "ModuleID" : "1111",
        "ModuleStatement" : "This is a Sceduling bot, Would you like to book a flight?",
        "_id" : ObjectId("59d4b9968621854d8fb2b1e3"),
        "ModuleResponse" : [ 
            {
                "Response" : "yes",
                "TransBotID" : "1112"
            }, 
            {
                "Response" : "no",
                "TransBotID" : "1113"
            }
        ]
    }, 
    {
        "ModuleID" : "1112",
        "ModuleStatement" : "Where would you like to go? New York ? LA?",
        "_id" : ObjectId("59d4b9968621854d8fb2b1e3"),
        "ModuleResponse" : [ 
            {
                "Response" : "New York",
                "TransBotID" : "1121"
            }, 
            {
                "Response" : "LA",
                "TransBotID" : "1122"
            }
        ]
    }, 
    {
        "ModuleID" : "1121",
        "ModuleStatement" : " New York..",
        "_id" : ObjectId("59d4b9968621854d8fb2b1e3"),
        "ModuleResponse" : []
    }, 
     {
        "ModuleID" : "1121",
        "ModuleStatement" : " New York..",
        "_id" : ObjectId("59d4b9968621854d8fb2b1e3"),
        "ModuleResponse" : []
      }
   }

我正在执行一个查询,首先检查 Bot_name,然后检查包含 JSON 对象的嵌套数组模块中的 ModuleID,这些对象为 1111、1112、1121 .. 等等 我如何只获取 Bot_name:Scheduling botModuleID:1111 的 json 对象

到目前为止我的查询是

botSchema.findOne({ Bot_name: req.body.Name ,'Modules.ModuleID':req.body.MID}, function (err, data) {
console.log(data)
   }

这里查询返回Modules内的所有json

如何只获取一个想要的json对象?像这样

{
    "ModuleID" : "1111",
    "ModuleStatement" : "This is a Sceduling bot, Would you like to book a flight?",
    "_id" : ObjectId("59d4b9968621854d8fb2b1e3"),
    "ModuleResponse" : [ 
        {
            "Response" : "yes",
            "TransBotID" : "1112"
        }, 
        {
            "Response" : "no",
            "TransBotID" : "1113"
        }
    ]
}

最佳答案

您需要使用 $elemMatch 来过滤子数组。

db.botSchema.findOne( 
    { Bot_name: "Scheduling bot"} 
    , { 'Modules': { $elemMatch:{'ModuleID':"1111"} } }
    , function (err, data) { console.log(data) })

结果:

{
    "_id" : ObjectId("59d4b9848621854d8fb2b1e1"),
    "Modules" : [ 
        {
            "ModuleID" : "1111",
            "ModuleStatement" : "This is a Sceduling bot, Would you like to book a flight?",
            "_id" : ObjectId("59d4b9968621854d8fb2b1e3"),
            "ModuleResponse" : [ 
                {
                    "Response" : "yes",
                    "TransBotID" : "1112"
                }, 
                {
                    "Response" : "no",
                    "TransBotID" : "1113"
                }
            ]
        }
    ]
}

关于json - 如何使用node.js仅获取嵌套JSON对象MongoDB的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46619514/

相关文章:

mysql - Lambda NodeJS MySQL 任务超时

node.js - Mongoose - 按字符串查询嵌套文档

javascript - 如何从 mongodb 获取数据到 html 表单字段?

ruby - 使用 grape API 将复杂的 JSON 发布到 PostgreSQL

javascript - 如何检查 JavaScript 中的特定异常?

node.js - 升级 Sequelize 包

javascript - MongoDB findOne() 用于从数据库检索

json - 尝试在 postgresql 中查询 json 文档时出现语法错误

json - Grails Ajax回调无法正确呈现/响应

python - 在 Python 中使用 json.loads 时,如何处理 CSV 中的非 ascii 字符?