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

  }

});
相关推荐
cd_949217218 分钟前
2026年朝阳永续AI小二专业研投能力解析
前端·人工智能·easyui
FlyWIHTSKY9 分钟前
`nth-child()`的 基础用法
前端·html
摇滚侠14 分钟前
Public Key Retrieval is not allowed
java·数据库·mysql
计算机学姐17 分钟前
基于微信小程序的宠物服务系统【uniapp+springboot+vue】
java·vue.js·spring boot·mysql·微信小程序·uni-app·宠物
lst042617 分钟前
Maven 构建命令
java·maven
梅孔立18 分钟前
Aspose.Words Java 表格动态删列、合并列、表头重建、全局字体统一解决方案
java·开发语言·word·aspose·在线编辑
Dxy123931021618 分钟前
js如何根据开始位置结束位置在类表中取对应范围的数据
开发语言·javascript·ecmascript
空中海18 分钟前
第一章:入门篇 — Maven 核心概念与基础使用
java·maven
Ww.xh19 分钟前
Figma设计稿转React代码:ClaudeCode+MCP实战教程
前端·react.js·figma
钱端工程师21 分钟前
vue自定义一个在线查看文件的组件(.xlsx、.docx、.pdf、图片等)
javascript·vue.js·pdf