首页 > 解决方案 > 比较猫鼬的时间

问题描述

我有一个具有两个属性StartTimeEndTime设置(工作时间)的机械架构,每当用户向机械师请求接受任何服务时,他都必须输入服务时间。

现在我想将用户输入的时间与机械模式中的时间(存储在 mongooDB 中)进行比较,以检查用户输入的服务时间之间是否有任何机制可用..比较时间特别是考虑到上午和下午...

我使用NODE.JSmongoose作为数据库和POSTMAN来发出 API 请求。

var Mechanicschema = new Schema({
startTime: {
        type: String,
        required:true
    },
    endTime: {
        type: String,
        required: true
    },
)}

标签: javascriptmongoosepostman

解决方案


首先,如果可能的话,不要将你的startTimeand存储endTime为字符串。将它们存储为数字(Unix 时间戳)或日期对象。否则,很难为您的数据库构建一个正确的查询,这是返回最相关结果的最有效方式。它还消除了关心 AM 或 PM 的需要。

假设您将它们存储为 Date 对象,并且您正在导出模式的Mechanics模型,例如:

const Mechanicschema = new Schema(
    {
        startTime: { type: Date, required: true },
        endTime: { type: Date, required: true },
    }
);

const Mechanics = mongoose.model('mechanics', Mechanicschema );

module.exports = Mechanics;

您可以执行以下操作:

const checkMechanic = async(user_date) => {
    // where user_date is expected to be a Date object similar to new Date()
    const results = await Mechanics.find({
        startTime: { $lte: user_date },
        endTime: { $gte: user_date }
    });

    if (results.length > 0) {
        return results;
    }

    return false;
};

一旦你调用这个函数,这里会发生什么,如果没有找到可用的机制,函数将返回 false,否则它将返回所有可用于执行任务的机制的列表。

如果您只关心第一个可用结果,您也可以替换find()为。findOne


推荐阅读