MongoDB中这种奇怪的搜索模式(解构)如何工作?

时间:2017-08-26 04:45:14

标签: javascript node.js mongodb ecmascript-6 promise

在mongo中发现this问题后,我发现了引起我注意的事情(看then()方法)

// connect to mongo, use Mongo Client
mongoose.connect(MONGO_URI, {useMongoClient: true})
  .then(({db: {databaseName}}) => console.log(`Connected to ${databaseName}`))
  .catch(err => console.error(err));

我确实理解,在mongoose对象中有db属性以及下面的两个或三个级别&sa; databaseName这就是我想要的情况。

我的问题

  • 是ECMAScript2015还是黑暗黑客?
  • 它有什么名字。不知道如何在尝试一段时间后找到它

谢谢

1 个答案:

答案 0 :(得分:4)

您所看到的是ES6 destructing syntax,而非对象。

它的意思是:

  • 将参数传递给.then()
  • 在该对象上找到db属性
  • 进一步构建db以查找其中的databaseName属性
  • databaseName提升到当前范围(在本例中为您的功能范围)

最深层的变形变量将在当前范围内可用。这是一个例子:

let { db: { databaseName } } = { db: { databaseName: 'ding' } }
// now databaseName is available in the current scope
console.log(databaseName)
// prints "ding"

这与用于执行ES6模块导入的语法相同:

// import the entire module into the current scope
import something from 'something'
// import only parts of the module into the current scope
import { InsideSomething } from 'something'
// some people also destructure after importing and entire module
const { InsideSomething, another: { InsideAnother } } = something;