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" });

  }

});
相关推荐
二哈赛车手7 小时前
新人笔记---ApiFox的一些常见使用出错
java·笔记·spring
代码搬运媛8 小时前
Jest 测试框架详解与实现指南
前端
栗子~~8 小时前
JAVA - 二层缓存设计(本地缓冲+redis缓冲+广播所有本地缓冲失效) demo
java·redis·缓存
YDS8298 小时前
DeepSeek RAG&MCP + Agent智能体项目 —— RAG知识库的搭建和接口实现
java·ai·springboot·agent·rag·deepseek
counterxing8 小时前
我把 Codex 里的 Skills 做成了一个 MCP,还支持分享
前端·agent·ai编程
wangqiaowq9 小时前
windows下nginx的安装
linux·服务器·前端
之歆9 小时前
DAY_12JavaScript DOM 完全指南(二):实战与性能篇
开发语言·前端·javascript·ecmascript
发现一只大呆瓜9 小时前
Vite凭什么这么快?3分钟带你彻底搞懂 Vite 热更新的幕后黑手
前端·面试·vite
Maimai108089 小时前
React如何用 @microsoft/fetch-event-source 落地 SSE:比原生 EventSource 更灵活的实时推送方案
前端·javascript·react.js·microsoft·前端框架·reactjs·webassembly
candyTong9 小时前
Claude Code 的 Edit 工具是怎么工作的
javascript·后端·架构