如何使用 Mongoose 查询导入的 json

How to query imported json using Mongoose

我已经将 json 文件上传到 MongoDB Atlas 集群(使用 mongoimport),现在我正在尝试使用 express 和 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}`));

我不确定这是否是您数据库中该类型 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(return 数组)findById(return 单个文档)或 findOne 和一个问题。

这里有一个如何创建模型的例子:

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

首先,初始化一个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" 和 "limit" 的适用值"nin".