查询以获取documentDB中数组中对象的特定属性

时间:2019-01-16 01:05:31

标签: azure-cosmosdb

我在documentDB中有一份文件清单。每个文档都是一个JSON对象,如下所示:

{
    "id" : 1,
    "field1": "property1" 
    "field2": {[ 
                    {
                        "a": "A",
                        "b": "B",
                        "c": "C",
                        "d": "D"
                    },
                    {
                        "a": "E",
                        "b": "F",
                        "c": "G",
                        "d": "H"
                    },
                    {
                        "a": "I",
                        "b": "J",
                        "c": "K",
                        "d": "L"
                    }   
              ]}
}

我想获取除field2中的“ c”和“ d”以外的所有字段的所有对象。结果应如下所示:

{
    "id" : 1,
    "field1": "property1" 
    "field2": {[ 
                    {
                        "a": "A",
                        "b": "B",
                    },
                    {
                        "a": "E",
                        "b": "F",
                    },
                    {
                        "a": "I",
                        "b": "J"
                    }   
              ]}
}

此问题的正确查询是什么?我面临的挑战是如何遍历field2中数组中的每个嵌套对象并仅提取“ a”和“ b”。谢谢!

2 个答案:

答案 0 :(得分:0)

由于您要删除源数据中的特定字段,因此建议您使用stored procedure来满足您的要求。您可以参考下面的测试步骤,它可以正常工作。

示例文档:

[
    {
        "id": "1",
        "field1": "property1",
        "field2": [
            {
                "a": "A",
                "b": "B",
                "c": "C",
                "d": "D"
            },
            {
                "a": "E",
                "b": "F",
                "c": "G",
                "d": "H"
            },
            {
                "a": "I",
                "b": "J",
                "c": "K",
                "d": "L"
            }
        ]
    },
    {
        "id": "2",
        "field1": "property2",
        "field2": [
            {
                "a": "A",
                "b": "B",
                "c": "C",
                "d": "D"
            },
            {
                "a": "E",
                "b": "F",
                "c": "G",
                "d": "H"
            },
            {
                "a": "I",
                "b": "J",
                "c": "K",
                "d": "L"
            }
        ]
    }
]

存储过程代码:

function sample() {
    var collection = getContext().getCollection();

    var isAccepted = collection.queryDocuments(
        collection.getSelfLink(),
        'SELECT r.id,r.field1,r.field2 FROM root r',
    function (err, feed, options) {
        if (err) throw err;

        if (!feed || !feed.length) {
            var response = getContext().getResponse();
            response.setBody('no docs found');
        }
        else {
            var returnArray=[];
            for(var i=0;i<feed.length;i++){
                var array = [];
                for(var j=0;j<feed[i].field2.length;j++){
                    console.log(j)

                    var obj = feed[i].field2[j];
                    var objNew = {};
                    for(var key in obj){
                        if(key != "c" && key !="d"){
                            console.log(obj[key]);
                            objNew[key] = obj[key];
                        }
                    }
                    array.push(objNew);
                }
                feed[i].field2 = array;
            }

            var response = getContext().getResponse();
            response.setBody(feed);
        }
    });

    if (!isAccepted) throw new Error('The query was not accepted by the server.');
}

输出:

[
    {
        "id": "1",
        "field1": "property1",
        "field2": [
            {
                "a": "A",
                "b": "B"
            },
            {
                "a": "E",
                "b": "F"
            },
            {
                "a": "I",
                "b": "J"
            }
        ]
    },
    {
        "id": "2",
        "field1": "property2",
        "field2": [
            {
                "a": "A",
                "b": "B"
            },
            {
                "a": "E",
                "b": "F"
            },
            {
                "a": "I",
                "b": "J"
            }
        ]
    }
]

答案 1 :(得分:-1)

SELECT f.id, f.field1, ARRAY(select c.a, c.b from c in f.field2) as field2
FROM f