MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

TypeError :db.collection n'est pas une fonction

J'ai donc voté pour la réponse qui disait de descendre à mongodb 2.2.33 parce que je l'ai essayé et ça a marché, mais ensuite je me suis senti bizarre de juste rétrograder pour résoudre un problème alors j'ai trouvé la solution qui vous permet de garder la version>=3.0. Si quelqu'un trouve ce problème et que son problème ne passait pas dans une référence vide comme la réponse acceptée, essayez cette solution.

Quand tu cours..

MongoClient.connect(db.url,(err,database) =>{ }

Dans la version mongodb>=3.0, cette database variable est en fait l'objet parent de l'objet auquel vous essayez d'accéder avec database.collection('whatever') . Pour accéder au bon objet, vous devez référencer le nom de votre base de données, pour moi c'était en faisant

MongoClient.connect(db.url,(err,database) =>{ 
  const myAwesomeDB = database.db('myDatabaseNameAsAString')
  myAwesomeDB.collection('theCollectionIwantToAccess')
}

Cela a corrigé mes erreurs lors de l'exécution de mon serveur node.js, j'espère que cela aidera quelqu'un qui ne veut pas simplement rétrograder sa version.

(également, si vous ne connaissez pas le nom de votre base de données pour une raison quelconque, faites simplement un console.log (base de données) et vous le verrez comme un attribut d'objet)

MODIFIER (juin 2018) :

Selon cela, le rappel renvoie en fait le client connecté de la base de données, au lieu de la base de données elle-même.

Par conséquent, pour obtenir l'instance de la base de données, nous devons utiliser cette méthode, qui prend un dbName . Dans la documentation, il est indiqué If not provided, use database name from connection string. , comme mentionné par @divillysausages dans les commentaires ci-dessous.

En bref, nous devrions appeler database.db().collection('theCollectionIwantToAccess'); si le dbName est fourni par url, où la database est en fait client pour mieux comprendre