MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

TypeError:db.collection ist keine Funktion

Also habe ich für die Antwort gestimmt, die besagte, dass sie einfach auf mongodb 2.2.33 heruntergehen soll, weil ich es ausprobiert habe und es funktioniert hat, aber dann fühlte ich mich komisch, nur ein Downgrade durchzuführen, um ein Problem zu beheben, also habe ich die Lösung gefunden, mit der Sie die Version>=beibehalten können 3.0. Wenn jemand dieses Problem findet und sein Problem nicht darin bestand, eine leere Referenz wie die akzeptierte Antwort zu übergeben, probieren Sie diese Lösung aus.

Wenn du rennst..

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

In Mongodb-Version>=3.0, Diese database Variable ist eigentlich das übergeordnete Objekt des Objekts, auf das Sie mit database.collection('whatever') zugreifen möchten . Um auf das richtige Objekt zuzugreifen, müssen Sie auf Ihren Datenbanknamen verweisen, bei mir war das so

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

Dies hat meine Fehler beim Ausführen meines node.js-Servers behoben. Hoffentlich hilft dies jemandem, der nicht nur seine Version herunterstufen möchte.

(Auch wenn Sie aus irgendeinem Grund Ihren DB-Namen nicht kennen, machen Sie einfach eine console.log(database) und Sie werden es als Objektattribut sehen)

EDIT (Juni 2018):

Demnach gibt der Callback statt der Datenbank selbst tatsächlich den verbundenen Client der Datenbank zurück.

Um die Datenbankinstanz zu erhalten, müssen wir daher diese Methode verwenden, die einen dbName entgegennimmt . In der Dokumentation hieß es If not provided, use database name from connection string. , wie von @divillysausages in den Kommentaren unten erwähnt.

Kurz gesagt, wir sollten database.db().collection('theCollectionIwantToAccess'); aufrufen wenn der dbName per URL bereitgestellt wird, wobei die database ist eigentlich client zum besseren Verständnis