децибел.коллекция не является функцией при использовании MongoClient v3. 0
Я W3schools учебник на nodeJS с MongoDB.
когда я пытаюсь реализовать этот пример в среде nodeJS и вызвать функцию с помощью вызова AJAX, я получил сообщение об ошибке ниже:
TypeError: db.collection is not a function
at c:UsersuserDesktopWeb ProjectWebService.JS:79:14
at args.push (c:Usersusernode_modulesmongodblibutils.js:431:72)
at c:Usersusernode_modulesmongodblibmongo_client.js:254:5
at connectCallback (c:Usersusernode_modulesmongodblibmongo_client.js:933:5)
at c:Usersusernode_modulesmongodblibmongo_client.js:794:11
at _combinedTickCallback (internal/process/next_tick.js:73:7)
at process._tickCallback (internal/process/next_tick.js:104:9)
пожалуйста, найдите ниже мой внедренный код:
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();
});
});
обратите внимание, что ошибка возникает при выполнении просмотров:
db.collection("customers").findOne({}, function(err, result) {}
кроме того, обратите внимание (если это имеет значение), что я установил последний пакет MongoDB для узел JS (npm install mongodb), а версия MongoDB-это MongoDB Enterprise 3.4.4, с узлом MongoDB.JS driver v3.0.0-rc0.
7 ответов:
Я столкнулся с тем же самым. В комплексе.json, измените строку mongodb на "mongodb": "^2.2.33". Вам нужно будет npm удалить mongodb; затем npm install для установки этой версии.
Это решило проблему для меня. Кажется, ошибка или документы должны быть обновлены.
для людей на версии 3.0 родного драйвера NodeJS MongoDB:
(это применимо к людям с "mongodb": "^3.0.0-rc0", или более поздней версии в пакете.json, которые хотят продолжать использовать последнюю версию.)
в версии 2.х MongoDB родной драйвер NodeJS вы получите объект базы данных в качестве аргумента для обратного вызова connect:
MongoClient.connect('mongodb://localhost:27017/mytestingdb', (err, db) => { // Database returned });
по словам список изменений для версии 3.0 теперь вы получаете клиентский объект, содержащий объект базы данных вместо:
MongoClient.connect('mongodb://localhost:27017', (err, client) => { // Client returned var db = client.db('mytestingdb'); });
The
close()
метод также был перемещен клиенту. Поэтому код в вопросе может быть переведен на: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(); }); });
для тех, кто хочет продолжать использовать версию ^3.0.1 будьте в курсе изменений в том, как вы используете
MongoClient.connect()
метод. Обратный вызов не возвращаетdb
вместо этого он возвращаетclient
, против которого есть функция под названиемdb(dbname)
что вы должны вызвать, чтобы получитьdb
экземпляр, который вы ищете.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(); });
Piggy backing на @MikkaS ответ для Mongo Client v3.x, мне просто нужен формат async / await, который выглядит немного измененным следующим образом:
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. }
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); }); }) })
единственная проблема с вашим кодом-это доступ к объекту, который содержит базу данных. Вы должны получить доступ к базе данных напрямую (см. переменную базы данных выше). Этот код вернет вашу базу данных в массиве, а затем он проходит через него и регистрирует имя для всех в базе данных.
Я решил это легко, выполнив следующие коды:
npm uninstall mongodb --save npm install mongodb@2.2.33 --save
Удачи В Кодировании!
У меня есть MongoDB shell version v3.6. 4, ниже кода используйте mongoclient, это хорошо для меня:
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()"); });