node.js - 使 Azure DocumentDB 不返回服务字段

标签 node.js azure azure-cosmosdb nosql

我在 Node 应用程序中对 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": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d1a5b4a2a591bcb0b8bdffb2bebc" rel="noreferrer noopener nofollow">[email protected]</a>",
    "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 执行相同的操作(见下文)。

更新

其他人建议在列表返回后删除它们,但在进一步考虑之后,可以使用查询和简单的用户定义函数 (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

关于node.js - 使 Azure DocumentDB 不返回服务字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36376209/

相关文章:

azure - kubernetes 中的子网

php - 将我的 Azure 应用服务更改为 PHP 8.1,nginx 不断返回 404

java - 天蓝色函数java CosmosDBTrigger输入和@SignalROutput输出,错误:Cannot create Collection Information

azure - Azure Cosmos DB 的图遍历性能

javascript - Excel 电子表格未下载

javascript - 如何像 Excel 舍入函数那样以负精度舍入 js 中的数字

javascript - 从 REPL 中更改 REPL 提示

Azure - 如何解决部署失败的问题

javascript - 如何监控 Node.js 的内存使用情况?

python-3.x - PYTHON - 删除 cosmos db 分区集合中的文档