sql >> Databasteknik >  >> NoSQL >> MongoDB

TypeError:db.collection är inte en funktion

Så jag röstade på svaret som sa att man bara skulle gå ner till mongodb 2.2.33 eftersom jag provade det och det fungerade, men sedan kände jag mig konstigt att bara nedgradera för att fixa ett problem så jag hittade lösningen som gör att du kan behålla version>=3.0. Om någon hittar det här problemet och deras problem inte skickades i en tom referens som det godkända svaret, prova den här lösningen.

När du springer...

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

I mongodb version>=3.0, den där database variabeln är faktiskt det överordnade objektet för objektet du försöker komma åt med database.collection('whatever') . För att komma åt rätt objekt måste du referera till ditt databasnamn, för mig var det genom att göra

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

Detta fixade mina fel när jag körde min node.js-server, förhoppningsvis hjälper det någon som inte bara vill nedgradera sin version.

(också, om du inte känner till ditt db-namn av någon anledning, gör bara en console.log(databas) så ser du det som ett objektattribut)

EDIT (juni 2018):

Enligt detta returnerar callbacken faktiskt databasens anslutna klient istället för själva databasen.

För att få databasinstansen måste vi därför använda den här metoden, som tar in ett dbName . I dokumentationen stod det If not provided, use database name from connection string. , som nämnts av @divillysausages i kommentarerna nedan.

Kort sagt, vi borde anropa database.db().collection('theCollectionIwantToAccess'); om dbName tillhandahålls av url, där database är faktiskt client för bättre förståelse



  1. MongoDB $sinh

  2. hur får man nycklar som inte matchar ett visst mönster i redis?

  3. Fel 99 vid anslutning till localhost:6379. Kan inte tilldela begärd adress

  4. Styre:Åtkomst har nekats att lösa egendomen från eftersom det inte är en egen egendom för sin förälder