You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express结合MongoDB如何通过firstName和lastName同时查询用户数据

实现双条件查询的两种方案

方案1:通过路由路径参数传递两个字段

修改路由规则,同时在路径中携带firstName和lastName两个参数,查询条件直接传入两个字段匹配即可:

// 路由改为携带两个参数,用/分隔
router.get('/:firstname/:lastname' , async (req, res)=>{
    try{
        // findOne传入两个查询条件,同时匹配firstName和lastName
        const user = await User.findOne({
            "firstName" : req.params.firstname,
            "lastName" : req.params.lastname
        })
        // 补充空值判断逻辑更严谨
        if(!user) return res.status(404).json({message: "未找到匹配的用户"})
        res.status(200).json({person : user})
    }catch(e){
        return res.status(500).json({message : e.message})
    }
})

调用的时候请求路径格式为 GET /xxx/张三/李四 即可,其中xxx是你路由的公共前缀。

方案2:通过查询参数传递(更灵活,支持扩展更多查询条件)

如果后续可能会加更多查询条件,推荐用查询参数传值,不需要修改路由规则:

router.get('/search' , async (req, res)=>{
    try{
        // 从query中取参数,兼容性更好
        const { firstname, lastname } = req.query
        // 先判断必填参数是否存在
        if(!firstname || !lastname) return res.status(400).json({message: "firstname和lastname为必填查询参数"})
        const user = await User.findOne({
            firstName: firstname,
            lastName: lastname
        })
        if(!user) return res.status(404).json({message: "未找到匹配的用户"})
        res.status(200).json({person : user})
    }catch(e){
        return res.status(500).json({message : e.message})
    }
})

调用的时候请求路径格式为 GET /xxx/search?firstname=张三&lastname=李四 即可。

小提示:原代码中返回状态码用了201,201一般用于资源创建成功的场景,查询接口用200更符合HTTP状态码规范,上面的示例已经做了调整。

内容的提问来源于stack exchange,提问作者Kevin Su

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:39:01