使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函数中过滤它们。