node.js - MongoDb Projection 不过滤返回数据
问题描述
函数声明:
static getUserInDatabase = ( userId ) => {
const db = getDb();
return db.collection( process.env.USERSCOLLECTION ).findOne( { _id: ObjectId( userId ) }, { name: 1 } );
};
函数调用
exports.getFriend = async ( req, res, next ) => {
const friend = await User.getUserInDatabase( req.body.friendId.id );
if ( friend !== null ) {
res.status( 200 ).send( friend );
} else {
res.status( 200 ).send( { message: "Did not find a friend with that ID" } );
}
};
MongoDB 用户文档
{
_id: 5dfa24dce9cbc0180fb60226,
tokens: [],
friends: [ 5dfa26f46719311869ac1756, 5dfa270c6719311869ac1757 ],
incomingFriendRequest: [],
incomingSpaceInvites: [],
name: 'Account 1',
email: 'account1@gmail.com',
password: '$2b$10$OzHulmDup8btvdWw5.XnMetRprlh/m3q6ydgFRkNqmYMtvyuRAlGu',
spaces: [ 5e16fcbabc23c11124cebf0e, 5e171c544f9bff15aafae505 ],
tasks: []
}
调用该函数时,我希望只收到{_id: 5dfa24dce9cbc0180fb60226, name: Account 1}
但是,我收到了文档中的所有内容。
我用错了吗?当想要过滤掉响应字段时,我所看到的任何地方都与我完全相同。
谢谢
解决方案
我假设您使用的是Node.js MongoDB 驱动程序 API
在文档之后,第二个参数findOne
是选项(不仅用于投影)。你必须像这样使用它:
.findOne({
_id: ObjectId(userId),
}, {
projection: {
name: 1,
},
})
推荐阅读
- .net - 使用 .Net 框架实现分层架构的 Serilog
- visual-studio - Visual Studio - 如何编辑资源中的禁用(灰色)图标?
- javascript - 为什么我不能用 Mongoose 设置数据库?
- php - 在 RabbitMQ 中排队 PHP 脚本
- c# - 如何在 XAML [Xamarin.Forms] 中使用 String 以外的类型设置自定义属性值
- flutter - 如何将可空整数默认为 0
- c# - 多个字符串之间的文本显示
- bash - 我如何知道包含特定提交哈希的所有 git 分支的列表
- pine-script - 研究实时警报重置初始化变量,但在历史数据上效果很好
- javascript - 是一个 href=mail 到代码执行的结束吗?