db.collection no es una función cuando se usa MongoClient v3.0

He estado probando el tutorial de W3schools en nodeJS con MongoDB.

Cuando bash implementar este ejemplo en un entorno nodeJS e invoco la función con una llamada AJAX, aparece el siguiente error:

TypeError: db.collection is not a function at c:\Users\user\Desktop\Web Project\WebService.JS:79:14 at args.push (c:\Users\user\node_modules\mongodb\lib\utils.js:431:72) at c:\Users\user\node_modules\mongodb\lib\mongo_client.js:254:5 at connectCallback (c:\Users\user\node_modules\mongodb\lib\mongo_client.js:933:5) at c:\Users\user\node_modules\mongodb\lib\mongo_client.js:794:11 at _combinedTickCallback (internal/process/next_tick.js:73:7) at process._tickCallback (internal/process/next_tick.js:104:9) 

Por favor encuentre abajo mi código implementado:

 var MongoClient = require('mongodb').MongoClient; var url = "mongodb://localhost:27017/mytestingdb"; MongoClient.connect(url, function(err, db) { if (err) throw err; db.collection("customers").findOne({}, function(err, result) { if (err) throw err; console.log(result.name); db.close(); }); }); 

Tenga en cuenta que el error se produce cada vez que se ejecuta la ejecución:

 db.collection("customers").findOne({}, function(err, result) {} 

Además, tenga en cuenta (en caso de que importe) que he instalado el último paquete MongoDB para el nodo JS ( npm install mongodb ), y la versión de MongoDB es MongoDB Enterprise 3.4.4, con el controlador MongoDB Node.js v3.0.0-rc0.

Me encontré con lo mismo. En package.json, cambie la línea mongodb a “mongodb”: “^ 2.2.33”. Necesitarás npm uninstall mongodb; entonces npm instala para instalar esta versión.

Esto resolvió el problema para mí. Parece ser un error o un documento necesita ser actualizado.

Para las personas en la versión 3.0 del controlador NodeJS nativo de MongoDB:

(Esto es aplicable a personas con “mongodb”: “^ 3.0.0-rc0”, o una versión posterior en package.json, que desean seguir usando la última versión).

En la versión 2.x del controlador NodeJS nativo de MongoDB , obtendría el objeto de la base de datos como argumento para la callback de conexión:

 MongoClient.connect('mongodb://localhost:27017/mytestingdb', (err, db) => { // Database returned }); 

De acuerdo con el registro de cambios para 3.0 ahora obtienes un objeto de cliente que contiene el objeto de base de datos:

 MongoClient.connect('mongodb://localhost:27017', (err, client) => { // Client returned var db = client.db('mytestingdb'); }); 

El método close() también se ha movido al cliente. El código en la pregunta puede por lo tanto traducirse a:

 MongoClient.connect('mongodb://localhost', function (err, client) { if (err) throw err; var db = client.db('mytestingdb'); db.collection('customers').findOne({}, function (findErr, result) { if (findErr) throw findErr; console.log(result.name); client.close(); }); }); 

Para aquellos que quieran seguir usando la versión ^ 3.0.1, tenga en cuenta los cambios en la forma de utilizar el método MongoClient.connect() . La callback no devuelve db sino que devuelve un client , frente al cual hay una función llamada db(dbname) que debe invocar para obtener la instancia de db que está buscando.

 const MongoClient = require('mongodb').MongoClient; const assert = require('assert'); // Connection URL const url = 'mongodb://localhost:27017'; // Database Name const dbName = 'myproject'; // Use connect method to connect to the server MongoClient.connect(url, function(err, client) { assert.equal(null, err); console.log("Connected successfully to server"); const db = client.db(dbName); client.close(); }); 

Apoyándose en la respuesta de @MikkaS para Mongo Client v3.x, solo necesitaba el formato async / await, que se ve ligeramente modificado como este:

 const myFunc = async () => { // Prepping here... // Connect let client = await MongoClient.connect('mongodb://localhost'); let db = await client.db(); // Run the query let cursor = await db.collection('customers').find({}); // Do whatever you want on the result. } 

Lo solucioné fácilmente ejecutando estos códigos:

  npm uninstall mongodb --save npm install mongodb@2.2.33 --save 

Feliz Codificación!

  MongoClient.connect(url (err, db) => { if(err) throw err; let database = db.db('databaseName'); database.collection('name').find() .toArray((err, results) => { if(err) throw err; results.forEach((value)=>{ console.log(value.name); }); }) }) 

El único problema con su código es que está accediendo al objeto que contiene la base de datos. Debe acceder directamente a la base de datos (consulte la variable de base de datos más arriba). Este código devolverá su base de datos en una matriz y luego recorrerá y registrará el nombre para todos en la base de datos.

Tengo la versión de shell MongoDB v3.6.4, uso de código a continuación mongoclient, es bueno para mí:

 var MongoClient = require('mongodb').MongoClient, assert = require('assert'); var url = 'mongodb://localhost:27017/video'; MongoClient.connect(url,{ useNewUrlParser: true }, function(err, client) { assert.equal(null, err); console.log("Successfully connected to server"); var db = client.db('video'); // Find some documents in our collection db.collection('movies').find({}).toArray(function(err, docs) { // Print the documents returned docs.forEach(function(doc) { console.log(doc.title); }); // Close the DB client.close(); }); // Declare success console.log("Called find()"); });