List Azure Cosmos查询要转换为列表
这是我的JSON数据,存储在cosmos数据库中List Azure Cosmos查询要转换为列表,list,azure,azure-cosmosdb,List,Azure,Azure Cosmosdb,这是我的JSON数据,存储在cosmos数据库中 { "id": "e064a694-8e1e-4660-a3ef-6b894e9414f7", "Name": "Name", "keyData": { "Keys": [ "Government", "Training", "support" ] } } 现在,我想编写一个查询来消除keyData,只获取如下
{
"id": "e064a694-8e1e-4660-a3ef-6b894e9414f7",
"Name": "Name",
"keyData": {
"Keys": [
"Government",
"Training",
"support"
]
}
}
现在,我想编写一个查询来消除keyData,只获取如下所示的键
{
"userid": "e064a694-8e1e-4660-a3ef-6b894e9414f7",
"Name": "Name",
"Keys" :[
"Government",
"Training",
"support"
]
}
到目前为止,我尝试了如下查询
SELECT c.id,k.Keys FROM c
JOIN k in c.keyPhraseBatchResult
这是行不通的
更新1:
在尝试使用Sajeetharan之后,我现在可以得到结果,但问题是它会在数组中生成另一个JSON
像
是否有任何方法可以只提取数组,而不再具有键值pari
{
"userid": "e064a694-8e1e-4660-a3ef-6b894e9414f7",
"Name": "Name",
"Keys" :[
"Government",
"Training",
"support"
]
}
你可以试试这个
SELECT C.id, ARRAY(SELECT VALUE serving FROM serving IN C.keyData.Keys) AS Keys FROM C
请使用cosmos db存储过程根据@Sajeetharan的sql实现所需的格式
function sample() {
var collection = getContext().getCollection();
var isAccepted = collection.queryDocuments(
collection.getSelfLink(),
'SELECT C.id,ARRAY(SELECT serving FROM serving IN C.keyData.Keys) AS keys FROM C',
function (err, feed, options) {
if (err) throw err;
if (!feed || !feed.length) {
var response = getContext().getResponse();
response.setBody('no docs found');
}
else {
var response = getContext().getResponse();
var map = {};
for(var i=0;i<feed.length;i++){
var keyArray = feed[i].keys;
var array = [];
for(var j=0;j<keyArray.length;j++){
array.push(keyArray[j].serving)
}
feed[i].keys = array;
}
response.setBody(feed);
}
});
if (!isAccepted) throw new Error('The query was not accepted by the server.');
}
输出:
谢谢Sajeetharan的回答,我尝试了你的答案,但面临其他问题,请查看OP中我的更新1。你能帮我改一下吗:选择C.id,ARRAYSELECT VALUE service FROM service IN C.keyData.Keys AS key FROM CThanks Krishnan and sajeetharan感谢您的帮助。感谢@jaygong upvoted,因为sajeetharan更新的查询现在起作用了。但通过您的解决方案,我学会了如何使用storproc实现这一点。再次感谢@贾扬德兰谢谢你。@sajeetharan的解决方案对你很好。
function sample() {
var collection = getContext().getCollection();
var isAccepted = collection.queryDocuments(
collection.getSelfLink(),
'SELECT C.id,ARRAY(SELECT serving FROM serving IN C.keyData.Keys) AS keys FROM C',
function (err, feed, options) {
if (err) throw err;
if (!feed || !feed.length) {
var response = getContext().getResponse();
response.setBody('no docs found');
}
else {
var response = getContext().getResponse();
var map = {};
for(var i=0;i<feed.length;i++){
var keyArray = feed[i].keys;
var array = [];
for(var j=0;j<keyArray.length;j++){
array.push(keyArray[j].serving)
}
feed[i].keys = array;
}
response.setBody(feed);
}
});
if (!isAccepted) throw new Error('The query was not accepted by the server.');
}