我有三个级别的嵌套数组。每个级别都有一个字段isCrash
,我需要使用规则抛出该标志:
services
(最低级别)数组的一个元素具有isCrash === true
,则需要将包含此服务的update shift(中间级别)更新为true
。isCrash === true
,则需要更新线程(高级),该线程包含此到true
的移位。isCrash === true
,则需要将item(基础对象指示器)更新为true
。类似于搜索工具。对于搜索服务(最后一个数组级别)有问题。逻辑:我们看到某些项目崩溃,深入内部,我们看到线程崩溃,深入内部,我们看到班次崩溃,深入内部,最后找到问题服务。
但是我在用猫鼬更新数据库状态时遇到了问题:
async function computeCrash(item, dayAgo) {
item.threads.forEach(thread => {
thread.shifts.forEach(shift => {
shift.services.forEach(service => {
if (service.lastUpdate < dayAgo) {
service.isCrash = true;
shift.isCrash = true;
thread.isCrash = true;
}
})
})
});
//update in database object with current item state.
}
此功能在scheduleJob
中每1分钟运行一次。由于项目很多,我需要更新最快的方法。
也许我需要更新整个对象或部分更新?我想在圈子内更新,不是一个好主意(我的数据库远离Web服务器)。
如何解决这种情况?
此项目架构:
const itemSchema = new Schema({
isCrash: {
type: Boolean,
default: true
},
threads: [
{
isCrash: {
type: Boolean,
default: true
},
number: {
type: Number,
required: true
},
shifts: [
{
isCrash: {
type: Boolean,
default: true
},
number: {
type: Number,
required: true
},
services: [
{
lastUpdate: {
type: Date,
default: null
},
isCrash: {
type: Boolean,
default: true
},
}
]
}
]
}
]
});