如何从MongoDB的users集合提取name和email并通过res.json返回?
提取用户name和email并返回的实现方法
场景1:已获取完整用户数据后的处理
如果已经从数据库拿到了题目中给出的完整用户数据集,直接用数组的map方法提取目标字段即可:
// 假设已获取到完整的返回数据 const dbResponse = {"success": true,"users": [{"photo": {"id": "users/m1ul7palf4iqelyfhvyv","secure_url": "https://res.cloudinary.com/dpbdw6lxh/image/upload/v1665251810/users/m1ul7palf4iqelyfhvyv.png"},"_id": "634158087709697bfc50480b","name": "updatetest1","email": "updatetest1@shoppers.com","role": "user","createdAt": "2022-10-08T10:59:20.933Z","__v": 0},{"photo": {"id": "users/ic2bfhlhvenrr6koesyo","secure_url": "https://res.cloudinary.com/dpbdw6lxh/image/upload/v1665301682/users/ic2bfhlhvenrr6koesyo.png"},"_id": "63427cb276374e72e4d13a8b","name": "test1","email": "testuser1@gmail.com","role": "user","createdAt": "2022-10-09T07:48:02.603Z","__v": 0}]}; // 提取每个用户的name和email const filteredUsers = dbResponse.users.map(user => ({ name: user.name, email: user.email })); // 通过res.json返回处理后的结果,可按需包装成指定结构 res.json({ success: true, users: filteredUsers });
场景2:数据库查询阶段直接指定返回字段(更高效)
没必要让数据库返回所有字段,直接在查询时用**投影(Projection)**指定只返回name和email,减少数据传输量:
Mongoose 写法
// 查询所有用户,仅返回name和email(_id默认会返回,不需要则添加_id: 0) User.find({}, 'name email') .then(users => { res.json({ success: true, users: users.map(user => ({ name: user.name, email: user.email })) }); }) .catch(err => { res.json({ success: false, message: err.message }); }); // 或者用对象形式明确指定投影,排除_id User.find({}, { name: 1, email: 1, _id: 0 }) .then(users => res.json({ success: true, users })) .catch(err => res.json({ success: false, message: err.message }));
原生MongoDB驱动写法
const db = client.db('你的数据库名称'); const userCollection = db.collection('users'); userCollection.find({}, { projection: { name: 1, email: 1, _id: 0 } }) .toArray() .then(users => { res.json({ success: true, users }); }) .catch(err => { res.json({ success: false, message: err.message }); });
内容的提问来源于stack exchange,提问作者harman_chahal
相关产品推荐
相关产品推荐

