azure - DocumentDB子文档投影

标签 azure azure-cosmosdb

我使用此类文档创建了一个集合:

{       
    "Date": 1481673600,
    "Name": "Test"
    "DailyCurve": [
      {
        "TimeStamp": 1481673600,
        "ACPower": 0,        
        "DCPower": 0
      },
      {
        "TimeStamp": 1481716800,
        "ACPower": 30.599999999999998,
        "DCPower": 0
      },
      {
        "TimeStamp": 1481717700,
        "ACPower": 50.099999999999994,
        "DCPower": 0
      },
      {
        "TimeStamp": 1481718600,
        "ACPower": 46.6,
        "DCPower": 0
      },
    ]
}

因为我想要查询大量数据,所以我想使用投影来减少所需的 RU。

我知道,例如,如果我只需要Date值,我只需使用此查询:

SELECT c.Date FROM c

但现在我还想将子文档投影到 DailyCurve 属性下。

要获得全套,我可以使用:

SELECT c.Date, c.DailyCurve FROM c

但是我必须做什么才能只接收 TimeStampACPower 值?

我想要创建的结果应如下所示:

[{      
    "Date": 1481673600,
    "DailyCurve": [
      {
        "TimeStamp": 1481673600,
        "ACPower": 0,
      },
      {
        "TimeStamp": 1481716800,
        "ACPower": 30.599999999999998,
      },
      {
        "TimeStamp": 1481717700,
        "ACPower": 50.099999999999994,
      },
      {
        "TimeStamp": 1481718600,
        "ACPower": 46.6,
      },
    ]
},
...]

最佳答案

您需要用户定义的函数来执行此操作。首先,为这样的项目注册一个 UDF:

function project(document) {
  var result = {};
  result["Date"] = document["Date"];
  result["DailyCurve"] = [];

  var dailyCurve = document["DailyCurve"]; 
  for (var idx in dailyCurve) {
    var elem = dailyCurve[idx];
    result["DailyCurve"].push(
       { "TimeStamp": elem["TimeStamp"], 
         "ACPower": elem["ACPower"]});
  }  
  return result;
}

然后在 DocumentDB 查询中使用它,例如:

SELECT udf.project(c) FROM c

如果您希望在 DocumentDB 中看到对子查询投影的 native 支持(无需 UDF),请在此处提出/投票:https://feedback.azure.com/forums/263030-documentdb

关于azure - DocumentDB子文档投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41709543/

相关文章:

azure - 更改 Feed 处理器 - 多个消费者获取所有 PartitonId 的租约

azure - 如何使用二级索引在 Azure 中存储和读取数百万条记录

sql-server - Cosmos DB 中的计算列,列基于另一列

c# - 对于Azure B2C,有没有办法通过声明发送用户主体名称?

javascript - 从 CosmosDb 读取的 Azure JavaScript 函数已连接,但查询超时且无输出

c# - 使用 Azure DocumentDB 的 MongoDB Indexes.CreateOneAsync 异常

azure - 具有二进制 Azure 函数的 DocumentDb

c# - 如何使用 Azure Functions 输出绑定(bind)设置服务总线消息的 MessageId?

azure - Microsoft 托管代理 - 指定与组织不同的区域

azure - 获取在 Azure Key Vault key 中上传的 pem 文件