javascript - MongoDB - 查询嵌套数组中的嵌套对象
问题描述
我恳请您对我需要做的这个查询提供帮助,但我对 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}})
但似乎不起作用。请帮忙!
解决方案
只是为了解决问题:问题中的查询效果很好。我和@Gabriel 聊天,问题是 Robomongo 在查询中添加了隐藏的不可打印的 unicode 字符。
总而言之,对于任何感兴趣的游牧民族,这里有几种查询对象数组的方法:
1) 数组上的隐式 $elemMatch / 简单点表示法:
db.getCollection('EventDateValidation').find({"validationStepData.deadlineDate.auditedDate": {$exists:true}})
2)显式$elemMatch(我们可以有多个查询条件):
db.getCollection('EventDateValidation').find({"validationStepData": { $elemMatch: {"deadlineDate.auditedDate" : {$exists:true} }}})
3)带有索引位置的数组点表示法(当我们知道数组中元素的确切位置时):
db.getCollection('EventDateValidation').find({"validationStepData.2.deadlineDate.auditedDate": {$exists:true}})
推荐阅读
- android - 如何使用“git cherry-pick”手动更新自定义 rom 的安全补丁?
- python - 如何使用 plotly express 创建子图?
- yugabyte-db - 接口连接限制配置
- reactjs - 参数对象(API 密钥)未与 axios.create 一起发送
- python - 解析 json 文件时获取 0 条记录,如果关键属性不存在
- python-3.x - pyinstaller 命令创建 exe 但不能正常工作
- amazon-web-services - 直接从 Lambda 调用 Kinesis Firehose 与 Kinesis Stream
- amazon-redshift - 无法让 AWS Data Pipeline 连接到 Redshift
- tensorflow - 如何修复使用 tensorflow 实现贝叶斯神经网络时的 fetch 参数错误
- url - 如何从 blob url 或 m3u8 下载 mp4 视频?