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);
}
}
日志
我正在 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);
}
}
日志