MongoDB atlas 触发器 - 超出执行时间限制

MongoDB atlas trigger - execution time limit exceeded

我正在 MongoDB atlas 上测试一个触发器,它运行一个 Realm 函数,用于在插入到 MongoDB 集合时将对象添加到 Algolia 索引。在我的例子中,记录成功上传到 Algolia 索引,但功能并没有就此停止,恰好超过了时间限制。

文档中提到

Function runtime is limited to 120 seconds

这就是函数超时的原因

这是我的 Realm 函数

exports = function(changeEvent) {
  
  const algoliasearch = require('algoliasearch');
  const client = algoliasearch(context.values.get('algolia_app'),context.values.get('algolia_key'));

  const index = client.initIndex("movies");


  changeEvent.fullDocument.objectID = changeEvent.fullDocument._id;
  delete changeEvent.fullDocument._id;
  index.saveObject(changeEvent.fullDocument)
  .then(({objectID}) => {
    console.log('successfully inserted: ',objectID);
  })
  .catch(err => {
    console.log(err);
  });
};

这是我在日志中得到的结果

Logs:
[
  "successfully inserted:  61cf0a79c577393620dd8c80"
]
Error:
execution time limit exceeded

我什至在 console.log 之后尝试使用 return 语句,但仍然是同样的问题。

我做错了什么

https://www.mongodb.com/community/forums/t/extremely-slow-execution-of-an-external-dependency-function/16919/27 所见,显然 MongoDB 团队已于今年三月初修复此问题。

我用下面的这段代码进行了测试,这次它运行完美,没有任何超时。 我将该函数设为异步函数。根据日志,执行索引甚至不需要 1 秒。

exports = async function(changeEvent) {

  const algoliasearch = require('algoliasearch');
  const client = algoliasearch(context.values.get('algolia_app'),context.values.get('algolia_key'));
  
  const index = client.initIndex("movies");

  changeEvent.fullDocument.objectID = changeEvent.fullDocument._id;
  delete changeEvent.fullDocument._id;
  try{
    const result = await index.saveObject(changeEvent.fullDocument);
    console.log(Date.now(),'successfully updated: ',result);
  }
  catch(e){
    console.error(e);
  }
}

日志