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

  }

});
相关推荐
zayzy7 分钟前
前端八股总结
开发语言·前端·javascript
今天减肥吗10 分钟前
前端面试题
开发语言·前端·javascript
西门吹-禅18 分钟前
【sap fiori cds up error】
java·服务器·sap cap cds
Rabbit_QL21 分钟前
【前端UI行话】前端 UI 术语速查表
前端·ui·状态模式
小码哥_常37 分钟前
一文带你吃透Android BLE蓝牙开发全流程
前端
敲代码的嘎仔41 分钟前
Java后端面试——SSM框架面试题
java·面试·职场和发展·mybatis·ssm·springboot·八股
小码哥_常42 分钟前
从“新老交锋”看Retrofit与Ktor
前端
大傻^1 小时前
Spring AI Alibaba RAG实战:基于向量存储的检索增强生成
java·人工智能·spring
大傻^1 小时前
Spring AI Alibaba 快速入门:基于通义千问的AI应用开发环境搭建
java·人工智能·后端·spring·springai·springaialibaba
伯恩bourne1 小时前
Google Guava:Java 核心工具库的卓越之选
java·开发语言·guava