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

  }

});
相关推荐
GR2342342 小时前
2025年影视仓TV+手机官方版 内置地址源支持高清直播
java·智能手机·软件
code_YuJun2 小时前
corepack 作用
前端
千寻girling2 小时前
Koa.js 教程 | 一份不可多得的 Node.js 的 Web 框架 Koa.js 教程
前端·后端·面试
全栈前端老曹2 小时前
【MongoDB】Node.js 集成 —— Mongoose ORM、Schema 设计、Model 操作
前端·javascript·数据库·mongodb·node.js·nosql·全栈
code_YuJun2 小时前
pnpm-workspace.yaml
前端
天才熊猫君2 小时前
“破案”笔记:iframe动态加载内容后,打印功能为何失灵?
前端
程序员清风2 小时前
北京回长沙了,简单谈谈感受!
java·后端·面试
何中应2 小时前
请求头设置没有生效
java·后端
五月君_2 小时前
炸裂!Claude Opus 4.6 与 GPT-5.3 同日发布:前端人的“自动驾驶“时刻到了?
前端·gpt
Mr Xu_2 小时前
前端开发中CSS代码的优化与复用:从公共样式提取到CSS变量的最佳实践
前端·css