【发布时间】:2019-03-27 00:47:57
【问题描述】:
Stitch function 返回每个非字符串字段的值类型。我相信这是因为函数在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;
};
【问题讨论】:
-
嗨,我想帮忙,但如果可以的话,我需要澄清一些事情。当您说“Stitch 函数中的相同查询返回...”时,您是指来自 Stitch 函数编辑器 UI 吗?您是从客户端 SDK 或其他函数调用函数,还是仅使用函数编辑器上的“运行”按钮?
-
好问题。是的,我在 1) Mongo Shell 和 2) Stitch 中的函数编辑器中运行查询。函数是等价的,但语法因上下文而异。上面的函数与函数编辑器中显示的完全相同。等效的 Shell 查询如下。它不返回值类型。
db.mycollection.find() -
我认为您只是看到 Stitch Function 控制台显示输出的方式。 Stitch 函数本身实际上并不返回 EJSON——它返回一个常规的 JS 对象。我不相信有办法改变函数控制台打印返回值的方式。您可以在函数中使用 console.log() 来打印内容。
-
另一个观察结果是你没有在等待 collection.find() 调用,所以
doc实际上是一个 Promise。不确定这对您是否有影响,但我觉得值得指出。 -
Stitch 函数在 webhook 中用于获取 React 应用程序的数据。 API 调用返回键入的数据。我可以使用虚线表示法访问数据(例如
absenceDate.$date.$numberLong)。结果,当需要格式化时,前端代码会变得很糟糕(例如{moment(parseInt(ex.absenceDate.$date.$numberLong)).format("MM/DD/YYYY")}。它可以工作,但并不理想。感谢您对此给予关注。