You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB查询AuditReport集合指定员工指定日期数据失败求助

问题解决方法

你的查询没返回结果,核心原因是Checked in字段存储的是带时间的完整字符串(比如06/20/2023 06:11 APM),而你用$eq直接匹配纯日期字符串06/20/2023,两者完全不相等,自然查不到数据。下面给你两种可行的解决方式:

方法一:用正则表达式匹配日期前缀

直接针对字符串格式做匹配,查询所有Checked in以06/20/2023开头的记录:

db.getCollection("AuditReport").find(
    {
        "Employee Name": "a1",
        "Checked in": { "$regex": "^06/20/2023" }
    }
);

另外注意你的数据里有一条a1的记录,字段名是Employee Name(两个空格),如果要把这条也纳入查询,需要加上$or条件:

db.getCollection("AuditReport").find(
    {
        $or: [
            { "Employee Name": "a1" },
            { "Employee  Name": "a1" }
        ],
        "Checked in": { "$regex": "^06/20/2023" }
    }
);

方法二:将日期转为Date类型(推荐)

字符串存储日期不利于后续的范围查询(比如查某月的所有记录),更规范的做法是把Checked in字段转换为MongoDB的Date类型。

1. 先批量转换现有数据

运行以下脚本将字符串日期转为Date对象(注意处理格式里的APM笔误,应该是AM/PM):

db.getCollection("AuditReport").find().forEach(doc => {
    // 修正可能的笔误:把APM替换成AM
    let checkedInStr = doc["Checked in"].replace("APM", "AM");
    // 解析字符串为Date对象(MM/DD/YYYY hh:mm AM/PM格式)
    let checkedInDate = new Date(checkedInStr);
    // 更新文档
    db.getCollection("AuditReport").updateOne(
        { "_id": doc._id },
        { "$set": { "Checked in": checkedInDate } }
    );
});

2. 用日期范围查询目标数据

转换完成后,就可以用更高效的日期范围查询来获取2023年6月20日的所有记录:

db.getCollection("AuditReport").find(
    {
        "Employee Name": "a1",
        "Checked in": {
            "$gte": new Date("2023-06-20"),
            "$lt": new Date("2023-06-21")
        }
    }
);

同样,如果要包含字段名是Employee Name的记录,加上$or条件即可。

内容的提问来源于stack exchange,提问作者vicky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 04:00:33