Więc głosowałem na odpowiedź, która mówiła, że po prostu przejdź do mongodb 2.2.33, ponieważ próbowałem i zadziałało, ale potem poczułem się dziwnie, że po prostu obniżyłem wersję, aby naprawić problem, więc znalazłem rozwiązanie, które pozwala zachować wersję>=3.0. Jeśli ktoś znajdzie ten problem, a jego problem nie przekazał pustego odniesienia, takiego jak zaakceptowana odpowiedź, wypróbuj to rozwiązanie.
Kiedy biegasz...
MongoClient.connect(db.url,(err,database) =>{ }
W wersji mongodb>=3.0, ta database
zmienna jest w rzeczywistości obiektem nadrzędnym obiektu, do którego próbujesz uzyskać dostęp za pomocą database.collection('whatever')
. Aby uzyskać dostęp do właściwego obiektu, musisz odwołać się do nazwy swojej bazy danych, dla mnie zrobiłem to, wykonując
MongoClient.connect(db.url,(err,database) =>{
const myAwesomeDB = database.db('myDatabaseNameAsAString')
myAwesomeDB.collection('theCollectionIwantToAccess')
}
To naprawiło moje błędy podczas uruchamiania serwera node.js, mam nadzieję, że pomoże to komuś, kto nie chce tylko obniżyć swojej wersji.
(także, jeśli z jakiegoś powodu nie znasz swojej nazwy bazy danych, po prostu wykonaj console.log(baza danych), a zobaczysz ją jako atrybut obiektu)
EDYCJA (czerwiec 2018):
Zgodnie z tym wywołanie zwrotne faktycznie zwraca podłączonego klienta bazy danych, zamiast samej bazy danych.
Dlatego, aby uzyskać instancję bazy danych, musimy użyć tej metody, która przyjmuje dbName
. W dokumentacji napisano If not provided, use database name from connection string.
, jak wspomniał @divillysausages w komentarzach poniżej.
Krótko mówiąc, powinniśmy wywołać database.db().collection('theCollectionIwantToAccess');
jeśli nazwa dbName jest dostarczana przez adres URL, gdzie database
jest w rzeczywistości client
dla lepszego zrozumienia