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