Mongoose查询时如何获取多个select:false属性?遇参数报错问题
解决Mongoose select多字段时的参数错误问题
你遇到的这个报错很典型——Mongoose的select()方法只接受单个参数,但你传了两个独立的字符串参数('+emailVerified'和'+password'),这就触发了参数格式错误。
下面给你三种可行的解决方法,任选其一都能解决问题:
合并字段为单个字符串(推荐)
把需要显式查询的字段用空格分隔,放在同一个字符串里传给select():const user = await User.findOne({ email }).select('+emailVerified +password');这里的
+前缀是关键,它会覆盖你Schema中{select: false}的默认配置,强制返回这两个原本被隐藏的字段。使用对象形式指定字段
如果你更习惯对象语法,也可以传递一个键值对对象,值为1表示要包含该字段:const user = await User.findOne({ email }).select({ emailVerified: 1, password: 1 });直接在
findOne的第二个参数中指定字段
除了调用select(),你也可以把字段选择作为findOne的第二个参数传入:const user = await User.findOne({ email }, '+emailVerified +password');
另外补充个小知识点:如果之后需要排除某些字段,可以用-前缀(比如'-avatar'表示不返回头像字段),不过你的场景是要获取默认隐藏的字段,所以用+前缀就完全符合需求啦。
内容的提问来源于stack exchange,提问作者Ashik
相关产品推荐
相关产品推荐

