sql >> Database teknologi >  >> NoSQL >> MongoDB

TypeError:db.collection er ikke en funktion

Så jeg stemte for svaret, der sagde, at man bare skulle gå ned til mongodb 2.2.33, fordi jeg prøvede det, og det virkede, men så følte jeg mig underlig med bare at nedgradere for at løse et problem, så jeg fandt løsningen, som giver dig mulighed for at beholde version>=3.0. Hvis nogen finder dette problem, og deres problem ikke blev sendt i en blank reference som det accepterede svar, så prøv denne løsning.

Når du løber...

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

I mongodb version>=3.0, den database variabel er faktisk det overordnede objekt for det objekt, du forsøger at få adgang til med database.collection('whatever') . For at få adgang til det korrekte objekt skal du referere til dit databasenavn, for mig var det ved at gøre

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

Dette løste mine fejl, da jeg kørte min node.js-server, forhåbentlig hjælper dette nogen, der ikke bare vil nedgradere deres version.

(også, hvis du af en eller anden grund ikke kender dit db-navn, skal du bare lave en console.log(database), og du vil se det som en objektattribut)

EDIT (juni 2018):

Ifølge dette returnerer tilbagekaldet faktisk databasens tilsluttede klient i stedet for selve databasen.

Derfor skal vi bruge denne metode for at få databaseinstansen, som tager et dbName ind. . I dokumentationen stod der If not provided, use database name from connection string. , som nævnt af @divillysausages i kommentarerne nedenfor.

Kort sagt bør vi kalde database.db().collection('theCollectionIwantToAccess'); hvis dbName er leveret af url, hvor database er faktisk client for bedre forståelse



  1. mongodb hvordan man ændrer standardport

  2. Sådan gør du:Aktiver brugergodkendelse og -autorisation i Apache HBase

  3. Redis - overvågning af hukommelsesforbrug

  4. Kombiner to Redis-instanser til en enkelt instans med to dbs