使Azure DocumentDB不返回服务字段
我在节点应用程序中使用类似于SQL的Sytax for Azure DocumentDB。 这里是方法代码
client.queryDocuments(collection._self, "SELECT * FROM root").toArray(function(err, results) { if (err) { callback(err); } else { callback(null, results); } });
和回应
[ { "id": "test1", "name": "Kate", "email": "test@mail.com", "brands": [ "AAAA", "BBB", "CCCi" ], "_rid": "WedNAN3lZgABAAAAAAAAAA==", "_self": "dbs/WedNAA==/colls/WedNAN3lZgA=/docs/WedNAN3lZgABAAAAAAAAAA==/", "_etag": "\"00001b00-0000-0000-0000-56fff6c60000\"", "_ts": 1459615430, "_attachments": "attachments/" }
]
有什么办法让DocumentDb不会重复执行服务字段(_rid,_self,_etag,_ts,_attachments),但不能在select子句中写入所有非服务字段?
更新
只要使用查询,就没有办法使用查询取回除系统字段以外的所有字段,但是不会在SELECT子句中列出每个非系统字段。 但是,您可以使用存储过程来完成此操作,在返回或使用UDF执行相同操作之前对其进行过滤(请参见下文)。
更新
其他人build议在列表返回后删除它们,但考虑到这一点之后,可以用一个查询和一个简单的用户定义函数(UDF)来做到这一点:
function stripUnderscoreFields (o) { output = {}; for (key in o) { value = o[key]; if (key.indexOf('_') !== 0) { output[key] = value; } } return output }
然后在像这样的查询中使用UDF:
SELECT VALUE udf.stripUnderscoreFields(c) FROM collection c
根据Azure DocumentDB REST API Query Documents
,这些字段由系统生成,请参阅API文档的Response - Body
正文部分以了解文档的属性。
用于Node.js的DocumentDB SDK包装了相关的REST API,因此如果不想返回,可以尝试在callback函数中过滤它们。