Ich habe versucht, W3schools Tutorial auf NodeJS mit MongoDB.
Wenn ich versuche, dieses Beispiel in einer NodeJS-Umgebung zu implementieren und die Funktion mit einem AJAX-Aufruf aufzurufen, wird der folgende Fehler angezeigt:
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)
Nachfolgend finden Sie meinen implementierten Code:
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();
});
});
Beachten Sie, dass der Fehler immer dann auftritt, wenn die Ausführung trifft:
db.collection("customers").findOne({}, function(err, result) {}
Beachten Sie außerdem (falls es darauf ankommt), dass ich das neueste MongoDB-Paket für Node JS ( npm install mongodb ) installiert habe und die MongoDB-Version MongoDB Enterprise 3.4.4 mit dem MongoDB Node.js-Treiber v3.0.0-rc0 ist.
db.collection()...
ein Konsolenprotokoll, um festzustellen, ob er dort ankommt, kein Problem.Antworten:
Ich bin auf dasselbe gestoßen. Ändern Sie in package.json die mongodb-Zeile in "mongodb": "^ 2.2.33". Sie müssen npm mongodb deinstallieren; dann npm installieren, um diese Version zu installieren.
Dies löste das Problem für mich. Scheint ein Fehler zu sein oder Dokumente müssen aktualisiert werden.
quelle
Für Benutzer der Version 3.0 des nativen MongoDB-NodeJS-Treibers:
(Dies gilt für Personen mit "mongodb": "^ 3.0.0-rc0" oder einer späteren Version in package.json, die weiterhin die neueste Version verwenden möchten.)
In Version 2.x des nativen MongoDB-NodeJS-Treibers erhalten Sie das Datenbankobjekt als Argument für den Verbindungsrückruf:
Gemäß dem Änderungsprotokoll für 3.0 erhalten Sie jetzt stattdessen ein Client-Objekt, das das Datenbankobjekt enthält:
Die
close()
Methode wurde ebenfalls auf den Client verschoben. Der Code in der Frage kann daher übersetzt werden in:quelle
var db = client.db('mytestingdb');
jedes Mal diese ( ) zusätzliche Zeile schreiben, anstatt nur so zu schreiben (MongoClient.connect('mongodb://localhost:27017/mytestingdb')
)? Ich arbeite immer mit der gleichen Datenbank. Gibt es einen Ansatz, um diese zusätzliche Linie zu beseitigen? Es ist ein bisschen zeitaufwändig für mich.Wenn Sie Version ^ 3.0.1 weiterhin verwenden möchten, beachten Sie die Änderungen an der Verwendung der
MongoClient.connect()
Methode. Der Rückruf wird nicht zurückgegeben,db
sondern zurückgegeben. Für dieseclient
Funktion wird eine Funktion aufgerufendb(dbname)
, die Sie aufrufen müssen, um diedb
gesuchte Instanz abzurufen.quelle
Das einzige Problem mit Ihrem Code besteht darin, dass Sie auf das Objekt zugreifen, in dem sich der Datenbankhandler befindet. Sie müssen direkt auf die Datenbank zugreifen (siehe Datenbankvariable oben). Dieser Code gibt Ihre Datenbank in einem Array zurück und durchläuft sie dann und protokolliert den Namen für alle in der Datenbank.
quelle
Huckepack auf @ MikkaS-Antwort für Mongo Client v3.x, ich brauchte nur das asynchrone / warten-Format, das wie folgt leicht modifiziert aussieht:
quelle
Ich habe ein wenig experimentiert, um zu sehen, ob ich den Datenbanknamen als Teil der URL behalten kann. Ich bevorzuge die Versprechenssyntax, aber sie sollte immer noch für die Rückrufsyntax funktionieren. Beachten Sie, dass client.db () aufgerufen wird, ohne Parameter zu übergeben.
Meine package.json listet monbodb ^ 3.2.5 auf.
Die Option 'useNewUrlParser' ist nicht erforderlich, wenn Sie bereit sind, eine Verfallswarnung zu verarbeiten. Es ist jedoch ratsam, an dieser Stelle zu verwenden, bis Version 4 herauskommt, bei der vermutlich der neue Treiber der Standard ist und Sie die Option nicht mehr benötigen.
quelle
Ich habe es einfach gelöst, indem ich diese Codes ausgeführt habe:
Viel Spaß beim Codieren!
quelle
Ich habe MongoDB Shell Version v3.6.4, unter Code verwenden Mongoclient, Es ist gut für mich:
quelle
Wenn noch jemand versucht, diesen Fehler zu beheben, habe ich dies wie folgt getan.
quelle
MongoDB-Abfragen geben einen Cursor auf ein im Speicher gespeichertes Array zurück. Um auf das Ergebnis dieses Arrays zuzugreifen, müssen Sie
.toArray()
am Ende der Abfrage aufrufen .quelle