【问题标题】:MongoDB query: filter and exclude fieldsMongoDB 查询:过滤和排除字段
【发布时间】:2018-05-11 15:48:19
【问题描述】:

我有以下数据结构:

{
"groups" : [ 
    {
        "internalName" : "Group1",
        "fields" : [ 
            {
                "internalName" : "Field1",
                "uiProperties" : {
                    "isShow" : true
                }
            }, 
            {
                "internalName" : "Field2",
                "uiProperties" : {
                    "isHide" : false
                }
            }
        ]
    }, 
    {
        "internalName" : "Group2",
        "fields" : [ 
            {
                "internalName" : "Field1",
                "uiProperties" : {
                    "IsHide" : false
                }
            }
        ]
    }
],
"internalName" : "Layout1"
},
{
"groups" : [ 
    {
        "internalName" : "Group3",
        "fields" : [ 
            {
                "internalName" : "Field2",
                "uiProperties" : {
                    "isShow" : true
                }
            }, 
            {
                "internalName" : "Field4",
                "uiProperties" : {
                    "isHide" : false
                }
            }
        ]
    }, 
    {
        "internalName" : "Group4",
        "fields" : [ 
            {
                "internalName" : "Field3",
                "uiProperties" : {
                    "IsHide" : false
                }
            }
        ]
    }
],
"internalName" : "Layout2"
}

目标是按字段内部名称过滤此数据并仅返回所需数据 - 仅返回仅包含具有选定内部名称的字段的组。例如上面的数据: 过滤的内部名称 - “Field2”、“Field4” 预期返回的数据:

{
"internalName" : "Layout1",
"groups" : [ 
    {
        "internalName" : "Group1",
        "fields" : [  
            {
                "internalName" : "Field2",
                "uiProperties" : {
                    "isHide" : false
                }
            }
        ]
    }
]
},
{
"internalName" : "Layout2",
"groups" : [ 
    {
        "internalName" : "Group3",
        "fields" : [ 
            {
                "internalName" : "Field4",
                "uiProperties" : {
                    "isHide" : false
                }
            }
        ]
    }
]
}

我正在尝试类似的东西

{
        $match: {  
            "groups.fields.internalName": {
                $in: ["Field2", "Field4"]
            }
        }
   },
   {
        $unwind: "$groups"
   },
   {  
        $unwind: "$groups.fields"
   },
   {  
        $group: {  
            _id:"$_id",
            internalName: {
                 $first: "$internalName",
            },    
            groups:{  
                 $push: {
                      internalName: "$groups.internalName",
                      fields: "$groups.fields"
                 }   
            }
        }
    }

但是效果不好.. 你能帮我吗?

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework mongodb-java mongodb-java-3.3.0


    【解决方案1】:

    您的聚合管道中有错误。首先展开组元素,然后展开字段元素

    {
      {$unwind: "$groups"},
      {$unwind: "$groups.fields"},
      {$match: {"groups.fields.internalName", {$eq: {$or: ["Field2", "Field4",...]}}}},
    
    }
    

    稍后按照您的方式对其进行分组。

    【讨论】:

      猜你喜欢
      • 2019-09-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 2023-01-04
      相关资源
      最近更新 更多