首页 > 解决方案 > 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 脚本端)。

有什么建议么?

谢谢!

标签: jsonmongodbpostgoogle-apps-scriptmongodb-stitch

解决方案


如何确保插入的对象值是数字类型?(与输入对象相同,我验证了此 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` };
}

推荐阅读