MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

TypeError:db.collection não é uma função


Então, votei na resposta que dizia para ir para o mongodb 2.2.33 porque tentei e funcionou, mas me senti estranho em fazer o downgrade para corrigir um problema, então encontrei a solução que permite manter a versão>=3.0. Se alguém encontrar esse problema e o problema não estiver passando uma referência em branco como a resposta aceita, tente esta solução.

Quando você corre..
MongoClient.connect(db.url,(err,database) =>{ }

Na versão mongodb>=3.0, esse database variável é na verdade o objeto pai do objeto que você está tentando acessar com database.collection('whatever') . Para acessar o objeto correto, você precisa referenciar o nome do seu banco de dados, para mim isso foi fazendo
MongoClient.connect(db.url,(err,database) =>{ 
  const myAwesomeDB = database.db('myDatabaseNameAsAString')
  myAwesomeDB.collection('theCollectionIwantToAccess')
}

Isso corrigiu meus erros ao executar meu servidor node.js, espero que isso ajude alguém que não queira apenas fazer o downgrade de sua versão.

(também, se você não souber seu nome de banco de dados por algum motivo, basta fazer um console.log(database) e você o verá como um atributo de objeto)

EDIT (junho de 2018):

De acordo com isso, o retorno de chamada na verdade retorna o cliente conectado do banco de dados, em vez do próprio banco de dados.

Portanto, para obter a instância do banco de dados, precisamos usar este método, que recebe um dbName . Na documentação dizia If not provided, use database name from connection string. , conforme mencionado por @divillysausages nos comentários abaixo.

Resumindo, devemos chamar database.db().collection('theCollectionIwantToAccess'); se o dbName for fornecido por url, onde o database é na verdade client para melhor compreensão