首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在我的mongodb和Google电子表格之间同步?

问如何在我的mongodb和Google电子表格之间同步?
EN

Stack Overflow用户
提问于 2019-08-24 17:54:35
回答 2查看 833关注 0票数 0

我希望使用来允许人们可视化和编辑存储在mongodb集合中的表的数据。

数据由web服务创建,每天大约创建50个mongodb集合。(数据本质上是表格式的:集合的所有文档都是具有相同键的平面键值对象。)

现在,我希望允许公司内部的人使用Google电子表格可视化和编辑表中的数据。

我正在寻找最好的方法,以保持蒙哥布和谷歌Spreasheets在同步。

我看了和。这似乎是可行的。我的设计是:

  1. 每次web服务将数据写入mongo集合时,它都会通过Google (java)更新相应的电子表格。
  2. 每分钟一次,使用Google修订版API,检查最近更新了哪些电子表格。

我可以区分人们通过电子表格应用程序所做的更改和web服务所做的更改,因为web服务使用的是一个特殊的用户。

但据我所知,Google修订版API不允许只获取一组用户所做的更改。

我的设计合适吗?

EN

回答 2

Stack Overflow用户

发布于 2019-08-26 15:10:34

如果您确实想使用更改跟踪方法,请将数据持久层推送到MongoDB和某种队列(Redis?RabbitMQ?)然后让另一个服务从队列中读取,将数据推入Google。这样,您就可以有序地记录应该发生的事情,而不会减缓数据的持久化(至少不会太多)。这可以变得非常健壮,这样如果您的服务出现故障,或者出现故障,您就不会迷失方向,而不得不进行一个完整的重新同步。

我不确定我们在这里讨论了多少数据,但如果可能的话,每隔几分钟将整个DB转储到电子表格中,或者按您实际需要的频率进行转储可能会更容易,而不是更改跟踪所有数据。

如果你有预算的话,你也可能想要查看商业智能工具。它们是专门设计来根据您的数据向业务人员提供信息的。它们还可能有一个连接器,它可以从MongoDB吸收所有数据,而不必修改集成层。然后,你可以专注于建立对你的业务更重要的事情。

票数 0
EN

Stack Overflow用户

发布于 2022-07-27 00:34:08

当您的集合发生更改时,我不知道如何发送数据,但是您可以有一个应用程序脚本,它可以在每次打开电子表格时、每分钟或每一天从mongo集合中获取数据。

要做到这一点,您可以使用应用程序脚本。

代码语言:javascript
复制
function importTimesheetsfromMongo() {

  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName("YourSheet");
  var range = sheet.getDataRange();
  var sheet_data = range.getValues();

  // getting the data
  var getData = UrlFetchApp.fetch('YourURL').getContentText();

  var jsonObj = JSON.parse(getData)

  var toAdd = []

  // iterate through each object
  for(var i=0;i<jsonObj.length;i++){ 
    // check if id exist in column
    var isIdInRange = sheet_data.some( function(row){
      return row[0] == jsonObj[i]._id
    });

    if(! isIdInRange){
      var new_row = [jsonObj[i].emp ,jsonObj[i]._id];
      toAdd.push(new_row);
    }
  }

  LockService.getScriptLock().waitLock(60000);
  sheet
  .getRange(
    sheet.getLastRow() + 1,
    1,
    toAdd.length,
    toAdd[0].length
  )
  .setValues(toAdd);

}

然后,使用带有函数的GET方法创建HTTP端点

代码语言:javascript
复制
exports = function(payload){
  const mongodb = context.services.get("mongodb-atlas");
  const db = mongodb.db("YourDB");
  const coll = db.collection("YourCollection");
  
  return coll.find({}).toArray();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57640333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档