【问题标题】:How to query imported json using Mongoose如何使用 Mongoose 查询导入的 json
【发布时间】:2019-11-29 19:16:13
【问题描述】:

我已将 json 文件上传到 MongoDB Atlas 集群(使用 mongoimport),现在我正在尝试使用 express 和 mongoose 将数据显示到 localhost。

我已经到了可以连接到集群的地步,但我在获取和显示数据方面遇到了困难。下面是我到目前为止的代码。我想使用 mongoose 通过 Nodejs 查询数据库,就像在命令行中使用 Mongo shell 一样。我在这里错过了什么?

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

【问题讨论】:

  • 可能是你被猫鼬连接了,你应该有餐厅模型并导入它,然后你可以写 res.send(Restaurant.find({}));
  • 它给了我一个 ReferenceError: Restaurant is not defined.
  • 你应该为餐厅创建一个模式模型
  • mongoose.connection.db.collection('restaurants').find();也试试这个方法

标签: javascript mongodb mongoose querying mongoimport


【解决方案1】:

首先,初始化一个Mongoose需要查询数据的模型。由于您已导入数据,因此您不必构建架构。

// restaurants.js
const mongoose = require('mongoose');

const RestaurantsSchema = new mongoose.Schema({});

module.exports = mongoose.model('Restaurants', RestaurantsSchema)

然后,将模式“Restaurants”导入您的主驱动程序文件,并通过如下链接过滤器指定您的查询:

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

您应填写“filter”、“sort”、“column”、“gt”、“equals”、“limit”和“nin”的适用值。

【讨论】:

  • 这很有效,谢谢。我使用了一个空模式并运行它并返回了文档。然后我就能够定义模式和查询文档了。
【解决方案2】:

这里是一个如何创建模型的示例:

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

这里是你的更新代码

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

【讨论】:

    【解决方案3】:

    我不确定这是否是您数据库中该类型 json 的唯一记录。但是,如果您想在获取请求后发送,您首先需要获取文档。

    // @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);
      });
    })
    

    根据您拥有的 mongoose.model 定义以及您希望如何找到它,您可以使用 find(返回数组) findById(返回单个文档)或 findOne 和查询。

    【讨论】:

      猜你喜欢
      • 2015-08-22
      • 2015-07-22
      • 1970-01-01
      • 1970-01-01
      • 2017-01-02
      • 1970-01-01
      • 2012-06-23
      • 2016-01-22
      • 2021-01-20
      相关资源
      最近更新 更多