我在documentDB中有一份文件清单。每个文档都是一个JSON对象,如下所示:
{
"id" : 1,
"field1": "property1"
"field2": {[
{
"a": "A",
"b": "B",
"c": "C",
"d": "D"
},
{
"a": "E",
"b": "F",
"c": "G",
"d": "H"
},
{
"a": "I",
"b": "J",
"c": "K",
"d": "L"
}
]}
}
我想获取除field2中的“ c”和“ d”以外的所有字段的所有对象。结果应如下所示:
{
"id" : 1,
"field1": "property1"
"field2": {[
{
"a": "A",
"b": "B",
},
{
"a": "E",
"b": "F",
},
{
"a": "I",
"b": "J"
}
]}
}
此问题的正确查询是什么?我面临的挑战是如何遍历field2中数组中的每个嵌套对象并仅提取“ a”和“ b”。谢谢!
答案 0 :(得分:0)
由于您要删除源数据中的特定字段,因此建议您使用stored procedure来满足您的要求。您可以参考下面的测试步骤,它可以正常工作。
示例文档:
[
{
"id": "1",
"field1": "property1",
"field2": [
{
"a": "A",
"b": "B",
"c": "C",
"d": "D"
},
{
"a": "E",
"b": "F",
"c": "G",
"d": "H"
},
{
"a": "I",
"b": "J",
"c": "K",
"d": "L"
}
]
},
{
"id": "2",
"field1": "property2",
"field2": [
{
"a": "A",
"b": "B",
"c": "C",
"d": "D"
},
{
"a": "E",
"b": "F",
"c": "G",
"d": "H"
},
{
"a": "I",
"b": "J",
"c": "K",
"d": "L"
}
]
}
]
存储过程代码:
function sample() {
var collection = getContext().getCollection();
var isAccepted = collection.queryDocuments(
collection.getSelfLink(),
'SELECT r.id,r.field1,r.field2 FROM root r',
function (err, feed, options) {
if (err) throw err;
if (!feed || !feed.length) {
var response = getContext().getResponse();
response.setBody('no docs found');
}
else {
var returnArray=[];
for(var i=0;i<feed.length;i++){
var array = [];
for(var j=0;j<feed[i].field2.length;j++){
console.log(j)
var obj = feed[i].field2[j];
var objNew = {};
for(var key in obj){
if(key != "c" && key !="d"){
console.log(obj[key]);
objNew[key] = obj[key];
}
}
array.push(objNew);
}
feed[i].field2 = array;
}
var response = getContext().getResponse();
response.setBody(feed);
}
});
if (!isAccepted) throw new Error('The query was not accepted by the server.');
}
输出:
[
{
"id": "1",
"field1": "property1",
"field2": [
{
"a": "A",
"b": "B"
},
{
"a": "E",
"b": "F"
},
{
"a": "I",
"b": "J"
}
]
},
{
"id": "2",
"field1": "property2",
"field2": [
{
"a": "A",
"b": "B"
},
{
"a": "E",
"b": "F"
},
{
"a": "I",
"b": "J"
}
]
}
]
答案 1 :(得分:-1)
SELECT f.id, f.field1, ARRAY(select c.a, c.b from c in f.field2) as field2
FROM f