Express + MongoDB 实现在筛选时间段中用户名的模糊查询

使用 `gte\`(大于等于)和 \`lte`(小于等于)操作符构建时间段查询条件。使用 `regex\` 操作符进行模糊查询,\`options: 'i'` 表示不区分大小写。使用 `$and` 操作符将它们组合起来。

javascript 复制代码
// 处理查询的路由

app.get("/users", async (req, res) => {

  const { startDate, endDate, usernameKeyword } = req.query;

  try {

    let query = {};

    // 构建时间段查询条件

    if (startDate && endDate) {

      query.createdAt = {

        $gte: new Date(startDate),

        $lte: new Date(endDate),

      };

    } else if (startDate) {

      query.createdAt = {

        $gte: new Date(startDate),

      };

    } else if (endDate) {

      query.createdAt = {

        $lte: new Date(endDate),

      };

    }

    // 构建用户名模糊查询条件

    if (usernameKeyword) {

      const usernameQuery = {

        username: {

          $regex: usernameKeyword,

          $options: "i",

        },

      };

      if (Object.keys(query).length > 0) {

        // 如果已经有时间段查询条件,使用 $and 操作符组合条件

        query = {

          $and: [query, usernameQuery],

        };

      } else {

        query = usernameQuery;

      }

    }

    // 执行查询

    const users = await User.find(query);

    res.json(users);

  } catch (error) {

    console.error("Error fetching users:", error);

    res.status(500).json({ error: "Internal Server Error" });

  }

});
相关推荐
meilindehuzi_a3 分钟前
深入理解 JavaScript 的同步与异步机制:从单线程设计到 Promise 核心应用
开发语言·javascript·ecmascript
如烟花的信页6 分钟前
加速乐cookie逆向分析
javascript·爬虫·python·js逆向
小刘|7 分钟前
Spring WebFlux + AI 流式输出深度解析:Spring AI 与 LangChain4j 效果差异溯源
java·后端·spring
永远的WEB小白11 分钟前
css改变svg图标的颜色
前端·javascript·css
Arvin.Angela12 分钟前
Maven 的基本配置操作
java·maven
夕除13 分钟前
Spring Security 配置类(SecurityConfig)
java·后端·spring
lfwh15 分钟前
探针程序技术解析:基于 Spring Boot 非 Web 模式的云服务监控告警系统
前端·spring boot·后端
weixin1997010801616 分钟前
[特殊字符] 1688开放平台API Sign签名算法详解(Java / Python / PHP 实现)
java·python·算法
Ajie'Blog19 分钟前
AI 周报 | Claude Opus 4.8、Copilot Agent 和 Codex 工作流加速
前端·人工智能·gpt·ai·copilot·ai编程
武子康21 分钟前
Java-22 深入浅出 MyBatis - 手写ORM框架3 手写SqlSession、Executor 工作原理
java·后端