Javascript MongoDB-查询嵌套数组中的嵌套对象

Javascript MongoDB-查询嵌套数组中的嵌套对象,javascript,mongodb,mongodb-query,embedded-documents,Javascript,Mongodb,Mongodb Query,Embedded Documents,我希望您能帮助我完成这个查询,我还不太精通MongoDB。我的数据结构如下所示: db.getCollection('EventDateValidation').find({}): /* 1 */ { "_id" : ObjectId("5b7b2e3ae5e2100007717d81"), "_class" : "com.overwatch.common.model.EventDateValidation", "caseNo" : "OW000002269122201

我希望您能帮助我完成这个查询,我还不太精通MongoDB。我的数据结构如下所示:

db.getCollection('EventDateValidation').find({}):

/* 1 */
{
    "_id" : ObjectId("5b7b2e3ae5e2100007717d81"),
    "_class" : "com.overwatch.common.model.EventDateValidation",
    "caseNo" : "OW000002269122201810201135",
    "loanNo" : "000002269122",
    "eventType" : "BREACLETTR",
    "validationStepData" : [ 
        {
            "startDate" : {
                "isChecked" : "Y",               
                "comments" : "",
                "auditedBy" : "Mahalakshmi M",
                "auditedDate" : "2018-12-12"
            }
        }, 
        {
            "completedDate" : {
                "isChecked" : "Y",
                "comments" : "",
                "auditedBy" : "Mahalakshmi M",
                "auditedDate" : "2018-12-13"
            }
        }, 
        {
            "deadlineDate" : {
                "isChecked" : "Y",
                "comments" : "",
                "auditedBy" : "Mahalakshmi M",
                "auditedDate" : "2018-12-13"
            }
        }
    ]
}

/* 2 */
{
    "_id" : ObjectId("5b7c11095c2b4d0007bc8c54"),
    "_class" : "com.overwatch.common.model.EventDateValidation",
    "caseNo" : "OW000000854076201808181158",
    "loanNo" : "000000854076",
    "eventType" : "FORSALAPPR",
    "validationStepData" : [ 
        {
            "startDate" : {
                "comments" : ""
            }
        }, 
        {
            "completedDate" : {
                "comments" : "Received Date = 8/4/2017"
            }
        }, 
        {
            "deadlineDate" : {
                "comments" : ""
            }
        }
    ]
}

/* 3 */
{
    "_id" : ObjectId("5b7ad05d5c2b4d0007bc8631"),
    "_class" : "com.overwatch.common.model.EventDateValidation",
    "caseNo" : "OW000000873954201810201235",
    "loanNo" : "000000873954",
    "eventType" : "HUDNOTIFCA",
    "validationStepData" : [ 
        {
            "startDate" : {
                "isChecked" : "Y",
                "comments" : "",
                "auditedBy" : "Brett Scott",
                "auditedDate" : "2018-09-25"
            }
        }, 
        {
            "completedDate" : {
                "isChecked" : "Y",
                "comments" : "",
                "auditedBy" : "Brett Scott",
                "auditedDate" : "2018-09-25"
            }
        }, 
        {
            "deadlineDate" : {
                "isChecked" : "Y",
                "comments" : "",
                "auditedBy" : "Brett Scott",
                "auditedDate" : "2018-09-25"
            }
        }
    ]
}
从这个集合中,我需要找到在“deadlineDate”中有“auditedDate”的文档。在本例中,我将找到文档1和3。请帮帮我,因为我被困在这件事上了

我试过了

db.getCollection('EventDateValidation').find({"validationStepData.deadlineDate.auditedDate":{$exists:true}})

但似乎不起作用。救命啊

点表示法不起作用,因为在
validationStepData
中有一个对象数组。可以使用将查询条件应用于与表达式匹配的数组元素

db.getCollection('EventDateValidation').find({"validationStepData" : { $elemMatch: {"deadlineDate.auditedDate" : {$exists:true} }}})

只是为了澄清问题:问题中的查询很有效。我和@Gabriel聊天,问题是Robomongo在查询中添加了隐藏的不可打印的unicode字符

总之,对于任何感兴趣的游牧民族来说,这里有几种查询对象数组的方法:

1) 数组上的隐式$elemMatch/简单点符号:

db.getCollection('EventDateValidation').find({"validationStepData.deadlineDate.auditedDate": {$exists:true}})
db.getCollection('EventDateValidation').find({"validationStepData.2.deadlineDate.auditedDate": {$exists:true}})
2) 显式$elemMatch(我们可以有多个查询条件):

3) 带索引位置的数组点表示法(当我们知道数组中元素的确切位置时):


你犯了什么错误?谢谢你。我没有收到任何错误,只是没有找到任何结果:在1837毫秒内获取了0条记录。我制作了一个与你一样的集合,它对我很有用。查询时会得到什么:
db.getCollection('EventDateValidation').find()
?谢谢,当我执行db.getCollection('EventDateValidation').find({})时,它将显示所有这三个文档。这与find()中的花括号有关吗?有趣的是,点表示法也应该起作用,即使在数组中也是如此。谢谢你,奥斯汀,你说得对,点表示法因为某种原因不起作用。正如您所提到的,$elemMatch的使用方法实际上对我有效。这样,它显示了预期的结果。非常感谢您的意见。非常感谢您的技术智慧,感谢您的帮助和我们在聊天中的讨论。我已经尝试了您在查询中提到的三种方法,只有第二种方法(使用$elemMatch)实际使用了预期的结果。这就是我需要的,非常感谢。
db.getCollection('EventDateValidation').find({"validationStepData.2.deadlineDate.auditedDate": {$exists:true}})