0

Stitch 函数返回每个非字符串字段的值类型。我相信这是因为函数在MongoDB Extended JSON中返回数据。

另一方面,Mongo Shell 返回标准 JSON,并且没有值类型。

如何抑制 MongoDB 函数返回的值类型?是否可以将 EJSON 转换回 JSON?

例如,对于日期字段,Mongo Shell 返回:

"dob" : ISODate("1995-01-11T00:00:00.000-07:00")

Stitch 函数中的相同查询返回:

"dob": {
  "$date": {
    "$numberLong": "232182000000"
  }

我的 Stitch 函数如下所示:

exports = function(){
    const collection = context.services.get("mongodb-atlas").db("mydb").collection("mycollection");
    const doc = collection.find().toArray();
  return doc;
};

是否有可以去除值类型的辅助函数?就像是...

exports = function(){
    const collection = context.services.get("mongodb-atlas").db("mydb").collection("mycollection");
    const doc = collection.find().toArray();
    const noValueTypes = doc.stripValueTypes()
  return noValueTypes;
};
4

1 回答 1

3

当一个 Function 结果传递给客户端时,它确实被序列化为 EJSON。

理想情况下,您的客户端可以将 EJSON 解析回常规 JS 对象,例如使用EJSON库,该库也内置在Stitch SDK中。

当然,如果你使用的是 Stitch SDK,直接调用函数就更好了。

另一种选择是使用响应对象来传递 JSON,如下所示:

exports = function(request, response) {
  // ... get data ...
  response.addHeader(
    "Content-Type",
    "application/json"
  );
  response.setBody(JSON.stringify(myData));
};

请注意,JSON 不能表示某些特殊的 BSON 类型,例如对象 id,因此在决定要返回哪些数据时,您需要牢记这一点。

于 2019-03-26T16:41:06.060 回答