json - insertOne 将对象的数值保存为字符串?
问题描述
我正在通过 webhook 从 Google Apps 脚本向 Mongo Stitch 发送一个对象(使用 http 服务)。输入对象是 {A=185, B=8, C=200},一旦插入 DB,它就变成 {A="185", B="8", C="200"}。保存在数据库中时如何避免将数字转换为字符串?
在 Google Apps 脚本端,我有:
function sendToStitch(){
var obj = {A=185, B=8, C=200};
var options = {
'method' : 'post',
'payload' : obj
};
var insertID = UrlFetchApp.fetch('https://eu-west-1.aws.webhooks.mongodb-stitch.com/api/client/v2.0/app/timesheetstest-fgidp/service/sheets/incoming_webhook/import', options);
}
在 Stitch 方面,我有一个 http 服务:
exports = async function(payload) {
const mongodb = context.services.get("mongodb-atlas");
const eventsdb = mongodb.db("time");
const eventscoll = eventsdb.collection("sheets");
const result = await eventscoll.insertOne(payload.query);
var id = result.insertedId.toString();
if(result) {
return JSON.stringify(id,false,false);
}
return { text: `Error saving` };
}
如何确保插入的对象值是数字类型?(与输入对象相同,我验证了此 Google Apps 脚本端)。
有什么建议么?
谢谢!
解决方案
如何确保插入的对象值是数字类型?(与输入对象相同,我验证了此 Google Apps 脚本端)。
根据 Google Apps Script UrlFetchApp的文档。payload
可以是字符串、字节数组、blob 或 JavaScript 对象。JavaScript 对象被解释为表单字段名称到值的映射,其中值可以是字符串或 blob。
我认为这就是数据在字符串中的原因,因为正在发送的对象被转换为:
{"A": "185", "B": "8", "C":"200"}
确保数字保持数字的方法之一是以扩展 JSON格式发送数据。首先,在 Google Apps Script 中将 JavaScript 对象转换为 JSON 字符串:
选项 A)
function sendToStitch(){
var obj = {A:285, B:28, C:300};
var options = {
'method' : 'post',
'contentType': 'application/json',
'payload' : JSON.stringify(obj)
};
var insertID = UrlFetchApp.fetch('https://eu-west-1.aws.webhooks.mongodb-stitch.com/api/client/v2.0/app/timesheetstest-fgidp/service/sheets/incoming_webhook/import', options);
}
选项 B)
function sendToStitch(){
var obj = {"A": {"$numberLong": "185"},
"B": {"$numberLong": "8" },
"C": {"$numberLong": "200"}};
var options = {
'method' : 'post',
'contentType': 'application/json',
'payload' : JSON.stringify(obj)
};
var insertID = UrlFetchApp.fetch('https://someurl/incoming_webhook', options);
}
在MongoDB Stitch Functions中,您可以使用EJSON.parse()解析输入。例如:
exports = async function(payload) {
let doc = EJSON.parse(payload.body.text());
const coll = context.services.get("mongodb-atlas")
.db("time")
.collection("sheets");
const result = await coll.insertOne(doc);
if(result) {
return result;
}
return { text: `Error saving` };
}
推荐阅读
- python - 在数据框列中搜索单词
- go - net/url 包根据请求查询参数添加换行符
- ffmpeg - 如何使用ffmpeg提取视频中的第一帧?
- maven - 如何在 NetBeans IDE 中更改 maven 的远程存储库 URL(从 http 到 https)?
- python - 当我将带有 ffmpeg 的 numpy 数组转换为音频文件(python)时,为什么 mp3/wav 持续时间不同?
- javascript - .forEach() 在第一次迭代后停止
- c++ - 使用移动和复制语义时,函数匹配如何工作?
- python - 使用带有选项的 selenium chrome webdriver 时出现 WebDriverException 错误
- json - 如何在多个键相等的情况下使用 Python 正确解析嵌套的 json
- android - Android:录制音频以供以后将背景流式传输到语音到文本?