匹配来自Mongodb中相同文档(Json Record)的不同子数组的两个条件

时间:2018-10-18 12:16:41

标签: mongodb mongodb-query

使用Mongodb 3.6,仅当第一个条件满足另一个数组中的同一文档时,才需要获取子数组的数据。

对于一个标识代码,我在同一文档中有不同阶段的数据作为子数组。喜欢:

第一个文档:

{ 
"currentStage" : "STAGE4", 
"stagesData" : [
    {
        "name" : "STAGE4", 
        "log" : {
            "who" : "dummy",
            "when" : "2018-10-15T06:30:50.000+0000"
        }
    }, 
    {
        "name" : "STAGE3", 
        "log" : {
            "who" : "dummy", 
            "when" : "2018-10-12T08:48:32.000+0000"
        }
    }, 
    {
        "name" : "STAGE2", 
        "log" : {
            "who" : "test", 
            "when" : "2018-10-11T07:12:34.000+0000"
        }
    }, 
    {
        "name" : "STAGE1", 
        "log" : {
            "who" : "dummy", 
            "when" : "2018-10-09T09:34:54.000+0000"
        }
    }
], 
"identification" : {
    "code"          : "Code2", 
    "Description"   : "Desc2"
}}

第二文档:

{ 
"currentStage" : "STAGE2", 
"stagesData" : [
    {
        "name" : "STAGE2", 
        "log" : {
            "who" : "dummy", 
            "when" : "2018-10-12T10:41:15.000+0000"
        }
    }, 
    {
        "name" : "STAGE1", 
        "log" : {
            "who" : "test", 
            "when" : "2018-10-11T09:34:53.000+0000"
        }
    }
], 
"identification" : {
    "code"          : "Code1", 
    "Description"   : "Desc1"
}}

现在,在MongoDB中,我需要找出 STAGE2 ON 2018-10-11 中的记录的标识,代码和标识。 因此,根据给定的数据,我应该只获得第一个文档,但是我同时获得了两个文档。 基本上,它应该搜索记录是否在STAGE2中,然后仅对同一文档的子数组应用下一个过滤器。但是在这种情况下,两个文档中的某个地方都将stageData.name命名为STAGE2,而log.when则将其命名为2018-10-11,而不是在同一文档中。

查询语句

  • 过滤位于stagesData.name =“ STAGE2”上的文档 stageData.log.when =“ 2018-10-11”

预期产量

  • 仅第一份文件。

当前输出

  • 两个文档都由mongodb查询返回。

我需要将两个过滤器应用于同一文档。 需要您的帮助来实现这一目标。希望我能解释清楚。

0 个答案:

没有答案