J'ai essayé le tutoriel W3schools sur nodeJS avec MongoDB.
Lorsque j'essaie d'implémenter cet exemple dans un environnement nodeJS et d'appeler la fonction avec un appel AJAX, j'ai l'erreur ci-dessous:
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)
Veuillez trouver ci-dessous mon code implémenté:
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();
});
});
Notez que l'erreur se produit chaque fois que l'exécution se produit:
db.collection("customers").findOne({}, function(err, result) {}
Notez également (au cas où cela importe) que j'ai installé le dernier package MongoDB pour le nœud JS ( npm install mongodb ), et que la version MongoDB est MongoDB Enterprise 3.4.4, avec le pilote MongoDB Node.js v3.0.0-rc0.
db.collection()...
un journal de console pour voir s'il y arrive, pas de problème.Réponses:
J'ai rencontré la même chose. Dans package.json, remplacez la ligne mongodb par "mongodb": "^ 2.2.33". Vous devrez désinstaller npm mongodb; puis npm install pour installer cette version.
Cela a résolu le problème pour moi. Semble être un bogue ou les documents doivent être mis à jour.
la source
Pour les utilisateurs de la version 3.0 du pilote NodeJS natif MongoDB:
(Cela s'applique aux personnes avec "mongodb": "^ 3.0.0-rc0", ou une version ultérieure de package.json, qui souhaitent continuer à utiliser la dernière version.)
Dans la version 2.x du pilote NodeJS natif MongoDB, vous obtiendrez l'objet de base de données comme argument du rappel de connexion:
Selon le changelog pour 3.0, vous obtenez maintenant un objet client contenant l'objet de base de données à la place:
La
close()
méthode a également été déplacée vers le client. Le code de la question peut donc être traduit en:la source
var db = client.db('mytestingdb');
) ligne supplémentaire à chaque fois au lieu d'écrire simplement comme ceci (MongoClient.connect('mongodb://localhost:27017/mytestingdb')
)? Je travaille toujours avec la même base de données. Existe-t-il une approche pour éliminer cette ligne supplémentaire? C'est un peu comme une chose qui prend du temps pour moi.Pour ceux qui souhaitent continuer à utiliser la version ^ 3.0.1, tenez compte des modifications apportées à la façon dont vous utilisez la
MongoClient.connect()
méthode. Le rappel ne retourne pas à ladb
place, il retourneclient
, contre lequel il y a une fonction appeléedb(dbname)
que vous devez appeler pour obtenir l'db
instance que vous recherchez.la source
Le seul problème avec votre code est que vous accédez à l'objet contenant le gestionnaire de base de données. Vous devez accéder directement à la base de données (voir la variable de base de données ci-dessus). Ce code renverra votre base de données dans un tableau, puis il la boucle et enregistre le nom de tout le monde dans la base de données.
la source
Piggy backing sur la réponse @MikkaS pour Mongo Client v3.x, j'avais juste besoin du format async / await, qui semble légèrement modifié comme ceci:
la source
J'ai fait un peu d'expérimentation pour voir si je pouvais garder le nom de la base de données dans le cadre de l'URL. Je préfère la syntaxe de promesse mais cela devrait toujours fonctionner pour la syntaxe de rappel. Notez ci-dessous que client.db () est appelé sans passer aucun paramètre.
Mon package.json répertorie monbodb ^ 3.2.5.
L'option 'useNewUrlParser' n'est pas requise si vous êtes prêt à gérer un avertissement d'obsolescence. Mais il est sage d'utiliser à ce stade jusqu'à ce que la version 4 sorte où vraisemblablement le nouveau pilote sera le pilote par défaut et vous n'aurez plus besoin de l'option.
la source
Je l'ai résolu facilement en exécutant ces codes:
Bon codage!
la source
J'ai la version de shell MongoDB v3.6.4, ci-dessous le code utilise mongoclient, c'est bon pour moi:
la source
Si quelqu'un essaie toujours de résoudre cette erreur, je l'ai fait comme ci-dessous.
la source
useUnifiedTopology: true
, qui est également nécessaire de nos jours.Les requêtes MongoDB renvoient un curseur sur un tableau stocké en mémoire. Pour accéder au résultat de ce tableau, vous devez appeler
.toArray()
à la fin de la requête.la source