如何通过嵌套在mongoDB中的值获取密钥?

时间:2019-06-13 07:48:19

标签: mongodb

我在MongoDB中具有以下结构。我想按特定值获取密钥。

例如如果v ='Item Information'中的值,我希望结果为A1

我没有什么限制
1.键名A1,E1 =将是动态的
2.其中的“ v”值将始终存在

对此应查询什么?

enter image description here

2 个答案:

答案 0 :(得分:1)

要处理动态键,您可以尝试如下操作:

db.collection.aggregate([
        {
            $unwind: "$sheet"    
        },
        {
            $project: {
                "sheetData": { $objectToArray: "$sheet" }
            }
        },
        {
            $match: {
                 "sheetData.v": { $elemMatch: { v: 'Item Information' } },
            }
        },
        {
            $project: {
                result: "$sheetData.k"
            }
        }
    ])

上面的查询将给出包含"v": "Item Information"

的结果keyName(A1)

结果如下:

{
    "_id" : ObjectId("5d020542c366c914650be72e"),
    "result" : [
        "A1"
    ]
}

我想让您知道,我正在尝试所有上述查询,然后只将其与结果JSON一起发布。因此,可能只有一个错误,我们俩都在使用不同的文档结构,因此请使用下面的虚拟Doc匹配您的结构。

{
    "_id" : ObjectId("5d020542c366c914650be72e"),
    "sheet" : [
        {
            "A1" : [
                {
                    "t" : "value"
                },
                {
                    "v" : "Item Information"
                },
                {
                    "r" : "value"
                },
                {
                    "h" : "value"
                },
                {
                    "w" : "value"
                }
            ]
        },
        {
            "E1" : [
                {
                    "t" : "value"
                },
                {
                    "v" : "value"
                },
                {
                    "r" : "value"
                },
                {
                    "h" : "value"
                },
                {
                    "w" : "value"
                }
            ]
        }
    ]
}

答案 1 :(得分:0)

请尝试如下搜索在“ sheet.A1”中包含“ v”:“项目信息”的提取文档。

db.collection.aggregate([
    {
        $unwind: "$sheet"
    },
    {
        $match: {
             "sheet.A1": { $elemMatch: { v: 'Item Information' } },
        }
    }
])

如果您需要其他帮助,请告诉我,我将更新查询。

我正在使用虚拟文档,如下所示:

{
    "_id" : ObjectId("5d020542c366c914650be72e"),
    "sheet" : [
        {
            "A1" : [
                {
                    "t" : "value"
                },
                {
                    "v" : "Item Information"
                },
                {
                    "r" : "value"
                },
                {
                    "h" : "value"
                },
                {
                    "w" : "value"
                }
            ]
        },
        {
            "E1" : [
                {
                    "t" : "value"
                },
                {
                    "v" : "value"
                },
                {
                    "r" : "value"
                },
                {
                    "h" : "value"
                },
                {
                    "w" : "value"
                }
            ]
        }
    ]
}

上述查询的结果如下:

{
    "_id" : ObjectId("5d020542c366c914650be72e"),
    "sheet" : {
        "A1" : [
            {
                "t" : "value"
            },
            {
                "v" : "Item Information"
            },
            {
                "r" : "value"
            },
            {
                "h" : "value"
            },
            {
                "w" : "value"
            }
        ]
    }
}