Я пробовал учебник W3schools по nodeJS с MongoDB.
Когда я пытаюсь реализовать этот пример в среде nodeJS и вызываю функцию с вызовом AJAX, я получаю следующую ошибку:
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)
Пожалуйста, найдите ниже мой реализованный код:
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 Node.js v3.0.0-rc0.
db.collection()...
с журнала консоли, чтобы увидеть, попадает ли он туда, нет проблем.Ответы:
Я столкнулся с тем же самым. В package.json измените строку mongodb на «mongodb»: «^ 2.2.33». Вам нужно будет удалить mongodb с помощью npm; затем npm install, чтобы установить эту версию.
Это решило проблему для меня. Кажется, это ошибка или необходимо обновить документы.
источник
Для пользователей версии 3.0 собственного драйвера NodeJS MongoDB:
(Это применимо к людям с "mongodb": "^ 3.0.0-rc0" или более поздней версией в package.json, которые хотят продолжать использовать последнюю версию.)
В версии 2.x собственного драйвера NodeJS MongoDB вы получите объект базы данных в качестве аргумента для обратного вызова подключения:
Согласно журналу изменений для 3.0 вы теперь получаете клиентский объект, содержащий объект базы данных:
close()
Метод также был перемещен к клиенту. Поэтому код в вопросе можно перевести на:источник
var db = client.db('mytestingdb');
каждый раз писать эту ( ) дополнительную строку вместо того, чтобы просто писать как this (MongoClient.connect('mongodb://localhost:27017/mytestingdb')
)? Я всегда работаю с одной и той же базой данных. Есть ли способ устранить эту лишнюю строку? Для меня это отнимает много времени.Тем, кто хочет продолжить использование версии ^ 3.0.1, следует знать об изменениях в том, как вы используете этот
MongoClient.connect()
метод. Обратный вызов не возвращает,db
вместо этого он возвращаетclient
, для чего вызывается функция,db(dbname)
которую вы должны вызвать, чтобы получитьdb
экземпляр, который вы ищете.источник
Единственная проблема с вашим кодом заключается в том, что вы обращаетесь к объекту, который содержит обработчик базы данных. Вы должны получить доступ к базе данных напрямую (см. Переменную базы данных выше). Этот код вернет вашу базу данных в массиве, а затем он будет перебирать ее и записывать имена всех в базе данных.
источник
Копилка для ответа @MikkaS для Mongo Client v3.x, мне просто нужен формат async / await, который выглядит немного измененным следующим образом:
источник
Я немного поэкспериментировал, чтобы увидеть, смогу ли я сохранить имя базы данных как часть URL-адреса. Я предпочитаю синтаксис обещания, но он все равно должен работать для синтаксиса обратного вызова. Обратите внимание, что client.db () вызывается без передачи каких-либо параметров.
В моем package.json перечислены monbodb ^ 3.2.5.
Параметр useNewUrlParser не требуется, если вы хотите иметь дело с предупреждением об устаревании. Но разумно использовать на этом этапе, пока не выйдет версия 4, где, предположительно, новый драйвер будет по умолчанию, и вам больше не понадобится эта опция.
источник
Я легко решил это, запустив эти коды:
Удачного кодирования!
источник
У меня версия оболочки MongoDB v3.6.4, ниже код использует mongoclient, это хорошо для меня:
источник
Если кто-то все еще пытается решить эту ошибку, я сделал это, как показано ниже.
источник
useUnifiedTopology: true
, которые необходимы и сегодня.Запросы MongoDB возвращают курсор в массив, хранящийся в памяти. Чтобы получить доступ к результату этого массива, вы должны вызвать его
.toArray()
в конце запроса.источник