Azure DocumentDB子文档投影

Azure DocumentDB子文档投影,azure,azure-cosmosdb,Azure,Azure Cosmosdb,我用这种文档创建了一个集合: { "Date": 1481673600, "Name": "Test" "DailyCurve": [ { "TimeStamp": 1481673600, "ACPower": 0, "DCPower": 0 }, { "TimeStamp": 1481716800, "ACPower": 30

我用这种文档创建了一个集合:

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

例如,我知道如果我只需要
日期
值,我只需使用以下查询:

SELECT c.Date FROM c
但现在我还想将子文档投影到
DailyCurve
属性下

要接收全套,我可以使用:

SELECT c.Date, c.DailyCurve FROM c
但是我必须做什么才能只接收
时间戳
ACPower
值呢

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

[{      
    "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中看到对子查询预测的本机支持(不需要UDF),请在此处提出建议/upvote:

谢谢Microsoft的Aravind:)我创建了一个建议