我们有一个嵌套的json如下:
{
"_id" : ObjectId("5a074fe0b9d31f246c102078"),
"projects" : [
{
"workstreams" : [
{
"cvids" : [
{
"opportunity" : {
"resources" : [
{
"utilisation" : 100,
"weekly_details" : [],
"fte_start_date" : "2017-11-13T00:00:00.000Z",
"fte_end_date" : "2017-11-27T00:00:00.000Z",
"fte_value" : 1
}
],
"utilisation" : 100,
"_id" : ObjectId("5a098fe0b9d31f246c102077")
},
"opportunity_cvid" : "33333",
"rpl_cvid" : "33333"
}
],
"workstream_name" : "Proj 1 WS1"
}
],
"project_name" : "Proj 1"
},
{
"workstreams" : [
{
"cvids" : [
{
"opportunity" : {
"resources" : [
{
"utilisation" : 100,
"weekly_details" : [],
"fte_start_date" : "2017-11-13T00:00:00.000Z",
"fte_end_date" : "2017-11-27T00:00:00.000Z",
"fte_value" : 1
}
],
"utilisation" : 100,
"_id" : ObjectId("5a098fe0b9d31f246c642077")
},
"opportunity_cvid" : "121212",
"rpl_cvid" : "121212"
}
],
"workstream_name" : "Proj2 WS2"
}
],
"project_name" : "Test Proj2"
},
{
"workstreams" : [
{
"cvids" : [
{
"opportunity" : {
"resources" : [
{
"utilisation" : 100,
"weekly_details" : [],
"fte_start_date" : "2017-11-13T00:00:00.000Z",
"fte_end_date" : "2017-11-27T00:00:00.000Z",
"fte_value" : 1
}
],
"utilisation" : 100,
"_id" : ObjectId("5a098fe0b9d31f306c102077")
},
"opportunity_cvid" : "33333",
"rpl_cvid" : "33333"
},
{
"opportunity" : {
"resources" : [
{
"utilisation" : 100,
"weekly_details" : [],
"fte_start_date" : "2017-11-13T00:00:00.000Z",
"fte_end_date" : "2017-11-27T00:00:00.000Z",
"fte_value" : 1
}
],
"utilisation" : 100,
"_id" : ObjectId("5a741fe0b9d31f306c102077")
},
"opportunity_cvid" : "656565",
"rpl_cvid" : "656565"
}
],
"workstream_name" : "Proj3 WS 3"
}
],
"project_name" : "Test Proj 3"
}
],
"contract_name" : "Contract 1"}
我是MongoDB的新手。我想创建一个通用查询来查找给定project_name和contract_name的所有'workstream_name'的列表。
例如对于contract_name ='Contract 1'(顶级数组)和project_name ='Test Proj2'(第2级数组),输出应为:
["Proj2 WS2"]
我尝试了很多查询。我能得到的最接近的是:
db.getCollection('opportunity').distinct("projects.workstreams.workstream_name", {'contract_name': 'ADRO', 'projects.project_name': 'Proj 1'})
输出:
[
"Proj2 WS2",
"Proj3 WS 3",
"Proj 1 WS1"
]
在此输出中,最后两个值与条件不匹配。请建议如何改进查询以仅获得符合条件的workstream_names。