insertOne 将对象的数值保存为字符串?
insertOne saves numeric values of object as string?
我正在通过 Webhook 从 Google Apps 脚本向 Mongo Stitch(使用 http 服务)发送一个对象。输入对象是 {A=185, B=8, C=200},一旦插入到数据库中,它就变成了 {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 脚本端)。
有什么建议吗?
谢谢!
How can I make sure that the object values are inserted with a number type? (same as in the input object, I verified this Google Apps Script-side).
根据 Google Apps 脚本 UrlFetchApp 的文档。 payload
可以是字符串、字节数组、blob 或 JavaScript 对象。 JavaScript 对象被解释为表单字段名称到值的映射, 其中值可以是字符串或 blob。
我想这就是为什么数据是string的原因,因为发送的对象被转换成:
{"A": "185", "B": "8", "C":"200"}
确保数字保持数字不变的方法之一是以 Extended JSON 格式发送数据。首先,将 JavaScript 对象转换为 Google Apps 脚本中的 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 you can then just parse the input using 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` };
}
我正在通过 Webhook 从 Google Apps 脚本向 Mongo Stitch(使用 http 服务)发送一个对象。输入对象是 {A=185, B=8, C=200},一旦插入到数据库中,它就变成了 {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 脚本端)。
有什么建议吗?
谢谢!
How can I make sure that the object values are inserted with a number type? (same as in the input object, I verified this Google Apps Script-side).
根据 Google Apps 脚本 UrlFetchApp 的文档。 payload
可以是字符串、字节数组、blob 或 JavaScript 对象。 JavaScript 对象被解释为表单字段名称到值的映射, 其中值可以是字符串或 blob。
我想这就是为什么数据是string的原因,因为发送的对象被转换成:
{"A": "185", "B": "8", "C":"200"}
确保数字保持数字不变的方法之一是以 Extended JSON 格式发送数据。首先,将 JavaScript 对象转换为 Google Apps 脚本中的 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 you can then just parse the input using 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` };
}