Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List Azure Cosmos查询要转换为列表_List_Azure_Azure Cosmosdb - Fatal编程技术网

List Azure Cosmos查询要转换为列表

List Azure Cosmos查询要转换为列表,list,azure,azure-cosmosdb,List,Azure,Azure Cosmosdb,这是我的JSON数据,存储在cosmos数据库中 { "id": "e064a694-8e1e-4660-a3ef-6b894e9414f7", "Name": "Name", "keyData": { "Keys": [ "Government", "Training", "support" ] } } 现在,我想编写一个查询来消除keyData,只获取如下

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

{
    "id": "e064a694-8e1e-4660-a3ef-6b894e9414f7",
    "Name": "Name",
    "keyData": {
        "Keys": [
            "Government",
            "Training",
            "support"
        ]
    }
}
现在,我想编写一个查询来消除keyData,只获取如下所示的键

{
    "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

是否有任何方法可以只提取数组,而不再具有键值pari

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

你可以试试这个

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

请使用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.');
}
输出:


谢谢Sajeetharan的回答,我尝试了你的答案,但面临其他问题,请查看OP中我的更新1。你能帮我改一下吗:选择C.id,ARRAYSELECT VALUE service FROM service IN C.keyData.Keys AS key FROM CThanks Krishnan and sajeetharan感谢您的帮助。感谢@jaygong upvoted,因为sajeetharan更新的查询现在起作用了。但通过您的解决方案,我学会了如何使用storproc实现这一点。再次感谢@贾扬德兰谢谢你。@sajeetharan的解决方案对你很好。
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.');
}