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

如何在Next.js中筛选MongoDB users集合指定用户的数据

MongoDB按username筛选数据的Next.js解决方案

需求说明

需要从MongoDB的users集合中筛选出仅属于user01的数据,避免为每个用户创建单独集合(受MongoDB命名空间限制)。

集合文档结构

{
    "_id": {
        "$oid": "636a904602fa5ea137276767"
    },
    "project_name": "project01",
    "username": "user01",
    "__v": {
        "$numberInt": "0"
    }
}

当前Next.js页面代码

import dbConnect from '../../lib/dbConnect'
import User from '../models/User'

export default function Page({ users }) {
    return (
        <>
            {users.map((user) => (
                <div key={user._id}>
                    <span>username: {user.username} project_name: {user.project_name}</span>
                </div>
            ))}
        </>
    );
}

export async function getServerSideProps() {

    await dbConnect()

    const result = await User.find({})
    const users = result.map((doc) => {
        const user = doc.toObject()
        user._id = user._id.toString()
        return user
    })

    return { props: { users: users } }
}

当前输出

username: user01 project_name: project01
username: user02 project_name: project02
username: user01 project_name: project03
username: user03 project_name: project04
username: user02 project_name: project05
username: user03 project_name: project06
username: user02 project_name: project07
username: user02 project_name: project08
username: user02 project_name: project09
username: user01 project_name: project10

期望输出

username: user01 project_name: project01
username: user01 project_name: project03
username: user01 project_name: project10

解决方案

修改getServerSideProps中的User.find()查询,添加username字段的筛选条件即可:

export async function getServerSideProps() {

    await dbConnect()

    // 添加{ username: 'user01' }作为筛选条件
    const result = await User.find({ username: 'user01' })
    const users = result.map((doc) => {
        const user = doc.toObject()
        user._id = user._id.toString()
        return user
    })

    return { props: { users: users } }
}

扩展:动态筛选不同用户

如果需要根据请求参数动态筛选用户(比如从URL中获取用户名),可以修改getServerSideProps获取context参数,从query中提取用户名:

export async function getServerSideProps(context) {
    await dbConnect()
    // 从URL query中获取username,比如访问 /users?username=user01
    const targetUsername = context.query.username || 'user01'
    const result = await User.find({ username: targetUsername })
    const users = result.map((doc) => {
        const user = doc.toObject()
        user._id = user._id.toString()
        return user
    })

    return { props: { users: users } }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:15:35