J'ai téléchargé un fichier json sur le cluster MongoDB Atlas (en utilisant mongoimport) et maintenant j'essaye d'afficher les données sur localhost en utilisant express et mongoose.
J'ai atteint un point où je peux me connecter à le cluster mais j'ai du mal à récupérer et afficher les données. Voici le code que j'ai jusqu'à présent. Je voudrais interroger la base de données via Nodejs en utilisant mongoose comme je le fais sur la ligne de commande avec Mongo shell. Que me manque-t-il ici?
const express = require("express"); const mongoose = require("mongoose"); const app = express(); // DB config using Mongo Atlas const uri = require("./config/keys").mongoURI; // // Connect to Mongo mongoose .connect(uri, { useNewUrlParser: true }) .then(() => console.log("MongoDB Connected...")) .catch(err => console.log(err)); // @route GET app.get("/", (req, res) => res.send(db.restaurants.find())); const port = process.env.PORT || 5000; app.listen(port, () => console.log(`Server started on port ${port}`));
3 Réponses :
Je ne sais pas s'il s'agit du seul enregistrement de ce type de json dans votre base de données. Mais si vous voulez envoyer si vous suivez une demande d'obtention, vous devez d'abord obtenir le document.
// @route GET app.get("/", (req, res) => res.send(db.restaurants.find())); // may be something like app.get('/', (req, res) => { mongooseModel.find({query}, (err, result) => { res.send(result); }); })
En fonction de la définition mongoose.model que vous avez et de la manière dont vous souhaitez la trouver, vous pouvez utiliser find (retourner un tableau) findById (retourner un document unique) ou findOne et une requête.
voici un exemple de création de votre modèle:
const express = require("express"); const mongoose = require("mongoose"); const Restaurant = require("./restaurant.js"); const app = express(); // DB config using Mongo Atlas const uri = require("./config/keys").mongoURI; // // Connect to Mongo mongoose .connect(uri, { useNewUrlParser: true }) .then(() => console.log("MongoDB Connected...")) .catch(err => console.log(err)); // @route GET app.get("/", (req, res) => { Restaurant.find({}, (err, docs) => { res.send(docs); }); ); const port = process.env.PORT || 5000; app.listen(port, () => console.log(`Server started on port ${port}`));
et ici votre code mis à jour
//restaurant.js const mongoose = require('mongoose'); const RestaurantSchema = new mongoose.Schema({ name: { type: String, required: true }, address: { type: String, required: true }, description:{ type: String, required: true } //just you add how you need your schema }); module.exports = mongoose.model('Restaurant', RestaurantSchema);
Tout d'abord, initialisez un modèle dont Mongoose a besoin pour interroger les données. Puisque vous avez importé les données, vous n'avez pas nécessairement à structurer votre schéma.
// main.js const express = require("express"); const mongoose = require("mongoose"); const Restaurants = require("./restaurants"); const app = express(); // DB config using Mongo Atlas const uri = require("./config/keys").mongoURI; // Connect to Mongo mongoose .connect(uri, { useNewUrlParser: true }) .then(() => console.log("MongoDB Connected...")) .catch(err => console.log(err)); // @route GET app.get("/", (req, res) => { Restaurants.find() .where("filter1").gt(200) .where("filter2").equals("$$$") .where("filter3").nin(["Coffee"]) .limit(100) .sort("sort1") .select("column1 column2 column3") .then(restaurants => res.json(restaurants)) .catch(err => res.status(404).json({ success: false })); }); const port = process.env.PORT || 5000; app.listen(port, () => console.log(`Server started on port ${port}`));
Ensuite, importez le schéma 'Restaurants' dans votre fichier pilote principal et spécifiez votre requête en chaînant des filtres comme ceci:
// restaurants.js const mongoose = require('mongoose'); const RestaurantsSchema = new mongoose.Schema({}); module.exports = mongoose.model('Restaurants', RestaurantsSchema)
Vous devez remplir les valeurs applicables pour "filtre", "tri", "colonne", "gt", "égal", "limite", et "nin".
Cela a fonctionné merci. J'ai utilisé un schéma vide et l'ai exécuté et il a renvoyé des documents. Ensuite, j'ai pu définir un schéma et interroger des documents.
peut-être que vous êtes connecté par mangouste et que vous devriez avoir le modèle de restaurant et l'importer, puis vous pourriez écrire res.send (Restaurant.find ({}));
Cela me donne une ReferenceError: le restaurant n'est pas défini.
vous devez créer un modèle de schéma pour Restaurant
mongoose.connection.db.collection ('restaurants'). find (); essayez aussi de cette façon