Така че гласувах за отговора, който казваше просто да сляза до mongodb 2.2.33, защото го пробвах и работи, но след това се почувствах странно, че просто понижавам, за да коригирам проблем, така че намерих решението, което ви позволява да запазите версия>=3.0. Ако някой открие този проблем и проблемът му не е бил предаван в празна препратка като приетия отговор, изпробвайте това решение.
Когато тичаш...
MongoClient.connect(db.url,(err,database) =>{ }
Във версия на mongodb>=3.0, тази database
променливата всъщност е родителският обект на обекта, до който се опитвате да получите достъп с database.collection('whatever')
. За да получите достъп до правилния обект, трябва да посочите името на вашата база данни, за мен това беше чрез правене
MongoClient.connect(db.url,(err,database) =>{
const myAwesomeDB = database.db('myDatabaseNameAsAString')
myAwesomeDB.collection('theCollectionIwantToAccess')
}
Това поправи грешките ми при стартиране на моя сървър node.js, надявам се това да помогне на някой, който не просто иска да понижи версията си.
(също, ако не знаете името на вашата db по някаква причина, просто направете console.log(database) и ще го видите като атрибут на обект)
РЕДАКТИРАНЕ (юни 2018 г.):
Според това обратното извикване всъщност връща свързания клиент на базата данни, вместо самата база данни.
Следователно, за да получим екземпляра на базата данни, трябва да използваме този метод, който приема dbName
. В документацията пишеше If not provided, use database name from connection string.
, както е споменато от @divillysausages в коментарите по-долу.
Накратко, трябва да извикаме database.db().collection('theCollectionIwantToAccess');
ако dbName е предоставено от url, където database
всъщност е client
за по-добро разбиране