【问题标题】:Getting grouped (distinct?!?) array of values from Cosmos SQL从 Cosmos SQL 中获取分组(不同的?!?)值数组
【发布时间】:2019-10-12 12:42:23
【问题描述】:

给定类似于以下内容的 Cosmos 文档集合,我想使用 Cosmos SQL 生成“类别”的分组(不同?!?)列表。在这方面的任何帮助将不胜感激。

[
  {
    "id": "f0136e76-8e66-6a5a-3790-b577001d6420",
    "itemId": "analyze-and-visualize-your-data-with-azure-cosmos-db-notebooks",
    "title": "Built-in Jupyter notebooks in Azure Cosmos DB are now available",
    "categories": [
      "Developer",
      "Database",
      "Data Science"
    ]
  },
  {
    "id": "f0136e76-8e66-6a5a-3790-b577001d6420",
    "itemId": "analyze-and-visualize-your-data-with-azure-cosmos-db-notebooks",
    "title": "Built-in Jupyter notebooks in Azure Cosmos DB are now available",
    "categories": [
      "Developer",
      "Database",
      "Data Science"
    ]
  },
  {
    "id": "d98c1dd4-008f-04b2-e980-0998ecf8427e",
    "itemId": "improving-azure-virtual-machines-resiliency-with-project-tardigrade",
    "title": "Improving Azure Virtual Machines resiliency with Project Tardigrade",
    "categories": [
      "Virtual Machines",
      "Supportability",
      "Monitoring"
    ]
  }
]

【问题讨论】:

    标签: azure-cosmosdb azure-cosmosdb-sqlapi


    【解决方案1】:

    到目前为止,Azure CosmosDB 不支持GroupBY。您也可以使用存储过程来实现您的要求。

    根据您上面给出的示例文档,这里是一个示例存储过程

    function groupBy() {
        var collection = getContext().getCollection();
        var collectionLink = collection.getSelfLink();
        var isValid = collection.queryDocuments(
            collectionLink,
            'SELECT * FROM stackoverflow s',
            {EnableCrossPartitionQuery: true},
        function (err, feed, options) {
            if (err) throw err;
            if (!feed || !feed.length) {
                var response = getContext().getResponse();
                console.log(JSON.stringify(response));
                response.setBody('no docs found');
            }
            else {
                var response = getContext().getResponse();
                var items = {};
                 for(var i=0;i<feed.length;i++){
                     var categories = feed[i].categories;
                     for(var j=0;j<categories.length;j++){
                            items[categories[j]] = categories[j]
                     }
                     var distinctArray = [];
                     for(var distinctObj in items){
                        distinctArray.push(items[distinctObj]);
                    }
                 }
                response.setBody(distinctArray);
            }
        });
    
        if (!isValid) throw new Error('Kindly check your query, which not accepted by the server.');
    }
    

    【讨论】:

    • 这行得通,非常感谢。不幸的是,它只适用于单个分区键值;我想在我的所有分区上运行查询,这在进一步的研究中似乎是不可能的。 Cosmos 真的很酷,但我不认为我可以将它用于我的场景;这需要小组工作。无论哪种情况,都感谢您及时而有帮助的回复。我一定会接受你的回答,即使这不是我所希望的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多