在 MongoDB Stitch 函数中抑制值类型

Suppress value types in MongoDB Stitch function

一个Stitch function returns value types for each non-string field. I believe this is because functions return data in MongoDB Extended JSON.

MongoShell,另一方面,returns标准JSON,没有值类型。

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

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

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

Stitch 函数中的相同查询 returns:

"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;
};

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

理想情况下,您的客户端可以将 EJSON 解析回常规的 JS 对象,例如与 EJSON library, which is also built into the Stitch SDK.

当然,如果你用的是Stitch SDK,calling the function directly就更好了。

另一种选择是使用 response object 传递 JSON,像这样:

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

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