Mongoose中findOne使用解构变量作为查询对象的疑问
关于Mongoose中findOne简写语法的疑问解答
先贴出你提到的代码片段:
dologin: (logindata) => { const { logemail, logpassword } = logindata return new Promise(async (resolve, reject) => { let user = await usermodel.findOne({ logemail}) const response = { usernotfound: false } // ... 后续代码 }) }
针对你的三个疑问,逐一解答:
1. 该写法的匹配字段与逻辑
这个写法是完全正确的,{ logemail }是ES6+的对象字面量简写语法,等价于{ logemail: logemail }。所以Mongoose会匹配MongoDB集合中名为logemail的字段,查找该字段值等于变量logemail的文档,匹配逻辑和显式写键值对的方式完全一致。
2. 对象解构的规则
对象解构和这里的对象字面量简写是两个相反的操作:
- 对象解构是按键名匹配赋值,和顺序无关。比如
const { a, b } = obj是从obj里取出键为a和b的值,哪怕obj里的键顺序是b在前也不影响。 - 而你代码里的
{ logemail }是对象字面量的简写规则:当要创建的对象的键名和已存在的变量名相同时,可以省略键名和冒号,直接写变量名,JS会自动把变量名作为键名,变量值作为对应的值。
3. 代码能正常运行的原因
这个写法不是错误,是ES6标准引入的语法糖,所有支持ES6+的JS环境(包括Node.js,而Mongoose是运行在Node.js上的)都能正常解析执行,所以代码可以正常运行。
内容的提问来源于stack exchange,提问作者sidhique kerala
相关产品推荐
相关产品推荐

