类型错误:无法读取null的属性“ hasListCollectionsCommand”

时间:2019-06-19 09:31:02

标签: node.js mongodb mongoose

我试图在mongodb(v4.0.2)中获得所有集合名称,并使用mongodb@3.1.10 nodejs驱动程序。从文档中,我可以看到listCollections可能有效,但是运行以下命令:

const Db = require('mongodb').Db
const Server = require('mongodb').Server
const db = new Db(dbName, new Server(host, port, options), {})
db.listCollections().toArray((error, collectionNames) => {
  console.error(error)
  console.log(JSON.stringify(collectionNames))
})

…导致此错误:

  

if(this.serverConfig.capabilities()。 hasListCollectionsCommand ){
  TypeError:无法读取null的属性'hasListCollectionsCommand'
  在Db.listCollections({path} /node_modules/mongodb/lib/db.js:493:39)
  位于db.createCollection({path} /sampleMongoDB.js:19:8)
  在错误({path} /node_modules/mongodb/lib/utils.js:415:14)
  在executeCallback({path} /node_modules/mongodb/lib/utils.js:404:25)
  在executeOperation({path} /node_modules/mongodb/lib/utils.js:422:7)
  在Db。 ({path} /node_modules/mongodb/lib/db.js:431:12)
  在Db.deprecated [as createCollection]({path} / node_modules / mongodb /lib/utils.js:661:17)
  在对象上。<匿名>({path} /sampleMongoDB.js:18:6)
  在Module._compile(module.js:653:30)
  在Object.Module._extensions..js(module.js:664:10)

我的问题是:

  1. 是否有MongoDB NodeJs驱动程序的文档站点,我们可以从中引用示例?
  2. 如果没有,查询的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

我能够解决。 MongoClient's instance返回一个db实例,这反过来又有助于运行mongodb.Db方法。

这是一个有效的示例代码(请参考MongoDB guides

const options = {
  useNewUrlParser: true, // Add this, if you wish to avoid {https://stackoverflow.com/questions/50448272/avoid-current-url-string-parser-is-deprecated-warning-by-setting-usenewurlpars} issue
}

const client = new MongoClient(connectionUri, options)

return client.connect().then(() => {
  const db = client.db(dbName)
  return db.listCollections()
    .toArray()
    .then((collections) => {
      // Collections array
    })

})

@Community mods-如果需要,请关闭此问题。