使 Azure DocumentDB 不 return 服务字段
Make Azure DocumentDB do not return service fields
我在节点应用程序中为 Azure DocumentDB 使用类似于 SQL 的语法。这是方法代码
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 执行相同的操作(见下文)。
更新
其他人建议在列表 returns 之后删除它们,但在进一步考虑之后,可以使用查询和简单的用户定义函数 (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,因此如果您不想 return,可以尝试在回调函数中过滤它们。
我在节点应用程序中为 Azure DocumentDB 使用类似于 SQL 的语法。这是方法代码
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 执行相同的操作(见下文)。
更新
其他人建议在列表 returns 之后删除它们,但在进一步考虑之后,可以使用查询和简单的用户定义函数 (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,因此如果您不想 return,可以尝试在回调函数中过滤它们。