sql >> Base de Datos >  >> NoSQL >> MongoDB

TypeError:db.collection no es una función

Así que voté por la respuesta que decía simplemente ir a mongodb 2.2.33 porque lo probé y funcionó, pero luego me sentí raro por simplemente bajar de categoría para solucionar un problema, así que encontré la solución que te permite mantener la versión> =3.0. Si alguien encuentra este problema y su problema no fue pasar una referencia en blanco como la respuesta aceptada, pruebe esta solución.

Cuando corres..

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

En la versión de mongodb>=3.0, Esa database la variable es en realidad el objeto principal del objeto al que intenta acceder con database.collection('whatever') . Para acceder al objeto correcto, debe hacer referencia al nombre de su base de datos, para mí eso fue haciendo

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

Esto solucionó mis errores al ejecutar mi servidor node.js, espero que esto ayude a alguien que no solo quiere degradar su versión.

(Además, si no conoce el nombre de su base de datos por alguna razón, simplemente haga un archivo console.log (base de datos) y lo verá como un atributo de objeto)

EDITAR (junio de 2018):

De acuerdo con esto, la devolución de llamada en realidad devuelve el cliente conectado de la base de datos, en lugar de la propia base de datos.

Por lo tanto, para obtener la instancia de la base de datos, necesitamos usar este método, que toma un dbName . En la documentación decía If not provided, use database name from connection string. , como lo menciona @divillysausages en los comentarios a continuación.

En resumen, deberíamos llamar a database.db().collection('theCollectionIwantToAccess'); si el dbName es proporcionado por url, donde database es en realidad client para una mejor comprensión