DocumentDB 子文档投影
DocumentDB subdocument projection
我用这种文档创建了一个集合:
{
"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
},
]
}
因为要查询海量数据所以想用projection来减少需要的RU。
我知道,例如,如果我只需要 Date
值,我只需使用此查询:
SELECT c.Date FROM c
但现在我还想投影 DailyCurve
属性 下的子文档。
要获得全套我可以使用:
SELECT c.Date, c.DailyCurve FROM c
但是我需要做什么才能只收到 TimeStamp
和 ACPower
值?
我想要创建的结果应该如下所示:
[{
"Date": 1481673600,
"DailyCurve": [
{
"TimeStamp": 1481673600,
"ACPower": 0,
},
{
"TimeStamp": 1481716800,
"ACPower": 30.599999999999998,
},
{
"TimeStamp": 1481717700,
"ACPower": 50.099999999999994,
},
{
"TimeStamp": 1481718600,
"ACPower": 46.6,
},
]
},
...]
您需要 user-defined 个函数来执行此操作。首先,为这样的项目注册一个 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 中看到对 sub-query 投影的原生支持(不需要 UDF),请propose/upvote 此处:https://feedback.azure.com/forums/263030-documentdb
我用这种文档创建了一个集合:
{
"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
},
]
}
因为要查询海量数据所以想用projection来减少需要的RU。
我知道,例如,如果我只需要 Date
值,我只需使用此查询:
SELECT c.Date FROM c
但现在我还想投影 DailyCurve
属性 下的子文档。
要获得全套我可以使用:
SELECT c.Date, c.DailyCurve FROM c
但是我需要做什么才能只收到 TimeStamp
和 ACPower
值?
我想要创建的结果应该如下所示:
[{
"Date": 1481673600,
"DailyCurve": [
{
"TimeStamp": 1481673600,
"ACPower": 0,
},
{
"TimeStamp": 1481716800,
"ACPower": 30.599999999999998,
},
{
"TimeStamp": 1481717700,
"ACPower": 50.099999999999994,
},
{
"TimeStamp": 1481718600,
"ACPower": 46.6,
},
]
},
...]
您需要 user-defined 个函数来执行此操作。首先,为这样的项目注册一个 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 中看到对 sub-query 投影的原生支持(不需要 UDF),请propose/upvote 此处:https://feedback.azure.com/forums/263030-documentdb