在MongoDB中查询匹配条件的子文档中的唯一键

时间:2017-11-14 15:52:45

标签: mongodb

我们有一个嵌套的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。

0 个答案:

没有答案