使用 `$gte`(大于等于)和 `$lte`(小于等于)操作符构建时间段查询条件。使用 `$regex` 操作符进行模糊查询,`$options: 'i'` 表示不区分大小写。使用 `$and` 操作符将它们组合起来。
// 处理查询的路由
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" });
}
});