Azure Cosmos查询以转换为列表

时间:2019-03-10 16:45:35

标签: list azure azure-cosmosdb

这是我的JSON数据,存储在cosmos数据库中

{
    "id": "e064a694-8e1e-4660-a3ef-6b894e9414f7",
    "Name": "Name",
    "keyData": {
        "Keys": [
            "Government",
            "Training",
            "support"
        ]
    }
}

现在,我想编写一个查询来消除keyData并仅获取Keys(如下所示)

{
    "userid": "e064a694-8e1e-4660-a3ef-6b894e9414f7",
    "Name": "Name",
    "Keys"  :[
        "Government",
        "Training",
        "support"
    ]
}

到目前为止,我尝试了

之类的查询
SELECT c.id,k.Keys  FROM c
JOIN k in c.keyPhraseBatchResult 

哪个不起作用。

更新1:

尝试使用 Sajeetharan 之后,现在我可以得到结果,但是问题是它在数组内部产生了另一个JSON。

喜欢

{
    "id": "ee885fdc-9951-40e2-b1e7-8564003cd554",
    "keys": [
        {
            "serving": "Government"
        },
        {
            "serving": "Training"
        },
        {
            "serving": "support"
        }
    ]
}

有什么方法可以只提取数组,而无需再次key value pari?

{
    "userid": "e064a694-8e1e-4660-a3ef-6b894e9414f7",
    "Name": "Name",
    "Keys"  :[
        "Government",
        "Training",
        "support"
    ]
} 

2 个答案:

答案 0 :(得分:2)

您可以尝试这个,

SELECT C.id, ARRAY(SELECT VALUE serving FROM serving IN C.keyData.Keys) AS Keys FROM C 

答案 1 :(得分:1)

请使用cosmos db存储过程基于@Sajeetharan的sql来实现所需的格式。

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

    var isAccepted = collection.queryDocuments(
        collection.getSelfLink(),
        'SELECT C.id,ARRAY(SELECT serving FROM serving IN C.keyData.Keys) AS keys FROM C',
    function (err, feed, options) {
        if (err) throw err;
        if (!feed || !feed.length) {
            var response = getContext().getResponse();
            response.setBody('no docs found');
        }
        else {
            var response = getContext().getResponse();
            var map = {};
             for(var i=0;i<feed.length;i++){
                 var keyArray = feed[i].keys;
                 var array = [];
                 for(var j=0;j<keyArray.length;j++){
                    array.push(keyArray[j].serving)
                 }
                 feed[i].keys = array;
             }
            response.setBody(feed);
        }
    });

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

输出:

enter image description here

相关问题