猫鼬。如何更新整个复杂对象?

时间:2018-08-20 02:25:45

标签: javascript algorithm mongoose

我有三个级别的嵌套数组。每个级别都有一个字段isCrash,我需要使用规则抛出该标志:

  1. 如果services(最低级别)数组的一个元素具有isCrash === true,则需要将包含此服务的update shift(中间级别)更新为true
  2. 如果“ shifts”(中级)数组的一个元素具有isCrash === true,则需要更新线程(高级),该线程包含此到true的移位。
  3. 如果“线程”(高级)数组的一个元素具有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
                            },
                        }
                    ]
                }
            ]

        }
    ]
});

0 个答案:

没有答案