我希望使用来允许人们可视化和编辑存储在mongodb集合中的表的数据。
数据由web服务创建,每天大约创建50个mongodb集合。(数据本质上是表格式的:集合的所有文档都是具有相同键的平面键值对象。)
现在,我希望允许公司内部的人使用Google电子表格可视化和编辑表中的数据。
我正在寻找最好的方法,以保持蒙哥布和谷歌Spreasheets在同步。
我看了和。这似乎是可行的。我的设计是:
我可以区分人们通过电子表格应用程序所做的更改和web服务所做的更改,因为web服务使用的是一个特殊的用户。
但据我所知,Google修订版API不允许只获取一组用户所做的更改。
我的设计合适吗?
发布于 2019-08-26 15:10:34
如果您确实想使用更改跟踪方法,请将数据持久层推送到MongoDB和某种队列(Redis?RabbitMQ?)然后让另一个服务从队列中读取,将数据推入Google。这样,您就可以有序地记录应该发生的事情,而不会减缓数据的持久化(至少不会太多)。这可以变得非常健壮,这样如果您的服务出现故障,或者出现故障,您就不会迷失方向,而不得不进行一个完整的重新同步。
我不确定我们在这里讨论了多少数据,但如果可能的话,每隔几分钟将整个DB转储到电子表格中,或者按您实际需要的频率进行转储可能会更容易,而不是更改跟踪所有数据。
如果你有预算的话,你也可能想要查看商业智能工具。它们是专门设计来根据您的数据向业务人员提供信息的。它们还可能有一个连接器,它可以从MongoDB吸收所有数据,而不必修改集成层。然后,你可以专注于建立对你的业务更重要的事情。
发布于 2022-07-27 00:34:08
当您的集合发生更改时,我不知道如何发送数据,但是您可以有一个应用程序脚本,它可以在每次打开电子表格时、每分钟或每一天从mongo集合中获取数据。
要做到这一点,您可以使用应用程序脚本。
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端点
exports = function(payload){
const mongodb = context.services.get("mongodb-atlas");
const db = mongodb.db("YourDB");
const coll = db.collection("YourCollection");
return coll.find({}).toArray();
}https://stackoverflow.com/questions/57640333
复制相似问题