1
votes

Comment interroger JSON importé à l'aide de Mongoose

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}`));


4 commentaires

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


3 Réponses :


1
votes

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.


0 commentaires

1
votes

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);


0 commentaires

2
votes

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".


1 commentaires

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.