Saya telah mencoba tutorial W3schools pada nodeJS dengan MongoDB.
Ketika saya mencoba menerapkan contoh ini di lingkungan nodeJS dan memanggil fungsi dengan panggilan AJAX, saya mendapatkan kesalahan di bawah ini:
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)
Silakan temukan di bawah ini kode yang saya implementasikan:
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();
});
});
Perhatikan bahwa kesalahan terjadi setiap kali eksekusi mencapai:
db.collection("customers").findOne({}, function(err, result) {}
Juga, perhatikan (jika penting) bahwa saya telah menginstal paket MongoDB terbaru untuk node JS ( npm install mongodb ), dan versi MongoDB adalah MongoDB Enterprise 3.4.4, dengan driver MongoDB Node.js v3.0.0-rc0.
db.collection()...
log konsol untuk melihat apakah ada di sana, tidak ada masalah.Jawaban:
Saya mengalami hal yang sama. Di package.json, ubah baris mongodb ke "mongodb": "^ 2.2.33". Anda harus menghapus instalan mongodb; lalu npm install untuk menginstal versi ini.
Ini menyelesaikan masalah bagi saya. Tampaknya ada bug atau dokumen yang perlu diperbarui.
sumber
Untuk orang-orang di versi 3.0 dari driver NodeJS asli MongoDB:
(Ini berlaku untuk orang dengan "mongodb": "^ 3.0.0-rc0", atau versi yang lebih baru di package.json, yang ingin tetap menggunakan versi terbaru.)
Dalam versi 2.x dari driver NodeJS asli MongoDB Anda akan mendapatkan objek database sebagai argumen ke callback koneksi:
Menurut changelog untuk 3.0 Anda sekarang mendapatkan objek klien yang berisi objek database sebagai gantinya:
The
close()
Metode juga telah dipindahkan ke klien. Kode dalam pertanyaan karena itu dapat diterjemahkan ke:sumber
var db = client.db('mytestingdb');
baris ekstra ini ( ) setiap kali alih-alih menulis seperti ini saja (MongoClient.connect('mongodb://localhost:27017/mytestingdb')
)? Saya selalu bekerja dengan database yang sama. Apakah ada pendekatan untuk menghilangkan garis tambahan itu? Ini seperti memakan waktu bagi saya.Bagi mereka yang ingin terus menggunakan versi ^ 3.0.1 waspadai perubahan cara Anda menggunakan
MongoClient.connect()
metode ini. Callback tidak kembalidb
sebagai gantinya kembaliclient
, di mana ada fungsi yang disebutdb(dbname)
bahwa Anda harus memanggil untuk mendapatkandb
contoh yang Anda cari.sumber
Satu-satunya masalah dengan kode Anda adalah bahwa Anda mengakses objek yang memegang pengendali database. Anda harus mengakses database secara langsung (lihat variabel database di atas). Kode ini akan mengembalikan database Anda dalam array dan kemudian loop melalui itu dan mencatat nama untuk semua orang di database.
sumber
Piggy mendukung @MikkaS jawaban untuk Mongo Client v3.x, saya hanya memerlukan format async / wait, yang terlihat sedikit dimodifikasi seperti ini:
sumber
Saya melakukan sedikit percobaan untuk melihat apakah saya bisa menjaga nama database sebagai bagian dari url. Saya lebih suka sintaks janji tetapi masih harus bekerja untuk sintaks callback. Perhatikan di bawah ini bahwa client.db () dipanggil tanpa melewati parameter apa pun.
Package.json saya mencantumkan monbodb ^ 3.2.5.
Opsi 'useNewUrlParser' tidak diperlukan jika Anda bersedia untuk berurusan dengan peringatan penghentian. Tetapi sebaiknya gunakan pada saat ini sampai versi 4 keluar di mana driver yang baru mungkin akan menjadi default dan Anda tidak akan memerlukan opsi lagi.
sumber
Saya menyelesaikannya dengan mudah melalui menjalankan kode-kode ini:
Selamat Coding!
sumber
Saya memiliki MongoDB shell versi v3.6.4, di bawah ini menggunakan kode mongoclient, Ini baik untuk saya:
sumber
Jika seseorang masih mencoba cara mengatasi kesalahan ini, saya telah melakukan ini seperti di bawah ini.
sumber
useUnifiedTopology: true
, yang juga dibutuhkan saat ini.Kueri MongoDB mengembalikan kursor ke array yang tersimpan di memori. Untuk mengakses hasil array itu, Anda harus menelepon
.toArray()
di akhir permintaan.sumber