我具有这样的数据结构:
{
_id: 'aero',mobile: '646-444-6666',mail: 'aero@aero.wang'
'service-name-1': ['type1','type2','type3'],'service-name-2': ['type1','type2'],'service-name-3': ['type2','type3']
}
我的目标是根据服务名称和类型安排作业,并将结果发送到用户的邮件和手机。挑战在于,多个用户可以具有相同的服务名称和类型,而我只想运行一个计划作业并通知所有用户。
所以我想出了这样的解决方案:
const client = require('./lib/esclient');
const schedule = require('node-schedule')
schedule.scheduleJob('0 0 * * *',() => {
const fields = await client.search({
index: 'docs',body: {
aggs: {
// aggregate existing fileds
}
}
});
const filedsAndTypes = await client.search({
index: 'docs',body: {
aggs: {
// based on fields and aggregate fields and type and users who should be notified
}
}
});
const notifyTheUsers = async fieldsAndTypes => {
for (let fieldAndtype in fieldsAndTypes) {
const result = await doTheJob(fieldAndtype);
const listOfUsers = fieldsAndTypes[fieldAndtype];
email(listOfUsers,result);
for (let user of listOfUsers) {
sms(user,result);
}
}
}
});
上面显然是伪代码。*
问题是我无法为使用Elasticsearch的字段进行汇总(另外,我还必须只能获取任何文档中存在的字段,一个用户可以是唯一一个说服务一的用户,而他可以取消订阅该服务,因此将服务一完全取消订阅,在这种情况下,将取消对服务一的订阅,该字段已定义,我不想在结果中使用它。
如果这实际上是不可能的话。随时提出可以实现我的目标的新数据结构。