我们说我有以下收藏品:
paidamount
我想查询以下结果:
[{"id": "1123",
"columns": [
{ "columnId": "1", "value":3},
{ "columnId": "2", "value":2 },
{ "columnId": "3", "value":7 }
]
},
{"id": "1124",
"columns": [
{ "columnId": "1", "value":5},
{ "columnId": "2", "value":6 },
{ "columnId": "3", "value":2 }
]
},
]
我试过这个查询
[{"id": "1123",
"columns": [
{ "columnId": "1", "value":3},
{ "columnId": "2", "value":2},
]
},
{"id": "1124",
"columns": [
{ "columnId": "1", "value":5},
{ "columnId": "2", "value":6},
]
},
]
但是它的输出看起来像我想要的那样:
SELECT c.id, [f] FROM c JOIN f IN c.columns WHERE f.columnId IN ('1','2')
答案 0 :(得分:1)
这是一个用户定义的函数(UDF),它将公开JavaScript的Array.slice()方法:
function(array, begin, end) {
return array.slice(begin, end);
}
如果您在针对此类示例文档的查询中使用它,则会得到输出要求:
SELECT c.id, udf.slice(c.columns, 0, 1) as columns FROM c
您也可以在JavaScript language-integrated query内使用切片运算符,但只能在服务器端SDK中使用,以便在sprocs或触发器中使用。
一般来说,我不喜欢DocumentDB的自连接功能来格式化输出。恕我直言,UDF更容易编写,消费它们的查询更容易理解。
唯一的缺点是将UDF添加到每个集合中的额外负担,但我是node.js包documentdb-utils的作者,其中我有自动加载目录中找到的所有sproc的功能您提供的列表中的每个集合。我现在为UDF添加相同的内容。
请注意,documentdb-utils的文档稍微落后于我在过去几天所做的主要重构,但测试显示了如何使用它的大部分功能。今天我会把它弄好,并添加加载所有UDF的功能,就像它加载所有的sprocs一样。