MongoDB初识

详情戳这里!全栈之巅
 
5 MongoDB基础
本节介绍如何在express中用mongoose链接MongoDB数据库进行操做。
 
以前的porducts接口中,有固定的数据。实际状况下,数据都是灵活可变的。能够经过某些方式新增、修改、删除数据等。那么数据就须要放进数据库。
 
数据库相似excel,有分页、按条件筛选等功能。
 
express中经常使用 MongoDB数据库。
 
  • 首先去下载mongoDB的server。
  • 而后安装 node 中用来链接数据库的mongoose
cnpm i mongoose
 
在MongoDB中,保存一类数据的(好比说有一样属性的:用户、产品信息等)结构称为 集合,或者叫模型,也能理解为表
在安装MongoDB后,在node中链接MongoDB的程序是mongoose。
MongoDB的一个特色是,能够自定义表,随后这个数据库就会自动建立。那么
  • 就首先链接数据库,
  • 而后建立一个集合,
  • 而后插入数据,
  • 而后查询其中数据便可。
const express = require('express');
 
const app = express();
 
const mongoose =require('mongoose');
 
 
// 参数一为数据库地址,每一个数据库都是一个服务器,因此是一个网络地址。
// 本地可使用127.0.0.1或者localhost。
// 地址标准为 mongodb:// Ip地址 :端口号(默认为27017)/数据库名称(此处能够自定义,mongodb
// 会自动建立对应表)
// 注意第二个参数是新版本要求的。
mongoose.connect(' mongodb://localhost:27017/express-test',{ useNewUrlParser: true });
// 数据库中,对应的东西须要分类存放,好比用户放在用户类中
// 在 mongdodb中,这个类叫作集合,一个集合中能够放不少行数据
// 相似 excel。
// 下面假设有一个产品表。对应 创建一个模型。表-模型-集合,能够同等看待。在mongodb中叫集合。
// 惯例,这个模型名字都是大写
// 参数一是模型名称,参数二是表结构。
// 参数二定义了表中的字段/属性,传递一个对象
const Product =mongoose.model('Product',new mongoose.Schema({
title:Number,
name:String
}));
// 测试用。
// Product.insertMany(
// [
// {title:1,name:'product1'},
// {title:2,name:'product2'},
// {title:3,name:'product3'}
// ]
// );
 
app.use(require('cors')())
 
app.use('/',express.static('public'))
 
app.get('/about',function(req,res){
res.send([
{page:'about'}
])
})
 
// 若是下面用了await,那么上面就要使用async
// 表示他是一个异步函数。 这是成对出现的。
app.get('/products',async function (req,res) {
// 每一次 数据库查询都是从Node数据库 的异步操做
// 因此要await
res.send(await Product.find())
})
 
app.listen(3000,()=>{
console.log("App is listening on port: 3000!")
})
 
链接数据库:
  • mongoose.connect函数。
    • 参数一为数据库地址
    • 地址标准为 mongodb:// ip地址 :端口号(默认为27017)/数据库名称(此处能够自定义,mongodb 会自动建立对应表
    • 参数二是按照报错提示添加的。
建立模型:
  • mongoose.model函数。
    • 参数一为模型名称,惯例首字母大写。
    • 参数二传入表的数据内容格式,mongoose.Schema函数
      • 内部相似接口。但注意数据类型是首字母大写的。
插入数据:
  • mongoose.insertMany函数。
  • 很明显,此处插入的数据是由数组传递的对象,而对象格式按照接口规定填写
  • 若是传错了,可能会出错?可是当前版本4.1( MongoDB)是作了并集的添加。
  • 不要写id或者_id。也不该该写__v。由于这是MongoDB的默认数据名。
查询数据:
  • 查询操做是异步操做,请使用async /await。这两个标志成对出现。
  • 使用Product上的find方法就能查询、返回数据库中的json数据。

6 MongoDB查询
 
上一节,讲到了基本的MongoDB查询,就是对模型调用find方法,基本上是查询当前模型中全部的记录。本节,继续深刻了解细分的数据库查询。
 
重提一次,async 和 await是成对出现的。 每一个查询数据库的操做都是一个异步操做。
 
排序:
app.get('/products',async function (req,res) {
// 每一次 数据库查询都是从Node数据库 的异步操做
// 因此要await
res.send(await Product.find().sort({
_id:-1
}))
})
按照id查询
app.get('/products/:id',async function(req,res){
const data =await Product.findById(req.params.id);
res.send(data)
})
限定显示n个
app.get('/products/1',async (req,res)=>{
const data =await Product.find().limit(1);
res.send(data)
})
跳过n个
app.get('/products/1',async (req,res)=>{
const data =await Product.find().skip(2).limit(1);
res.send(data)
})
按照(传入的对象)条件查询
这里传入的对象就是表示,要查询什么字段,字段的值是多少。 ---什么字段,什么值。返回有这个指定字段和对应的值得数据。
app.get('/products/1',async (req,res)=>{
const data =await Product.find().where({
name:"product5"
});
res.send(data)
})
基本上都是跟在一个模型以后的find类方法。
 

MongoDB新增产品和post请求
 
以前使用insertMany这种程序化的手段新增了数据,下面介绍新增产品的接口
 
get 请求是在网页中输入地址来获取资源的方式。默认用于获取数据。提交数据,通常使用post方法定义路由。
如今vscode中安装扩展,rest client。用于在vscode中,用代码的方式发起http请求。
 
在根目录新建文件 test.http就可使用rest client发送请求了。
 
rest client 语法简单介绍
@uri =http://localhost:3000/
###
 
 
 
 
GET {{uri}}products
###
 
 
GET {{uri}}products/1
 
 
###
 
 
POST {{uri}}products
Content-Type: application/json
 
 
{
"title":626464
}
###
GET {{uri}}products/5cfba45e2318f831508ba40d
  • 用双大括号插值
  • 用@定义变量
  • 用三个井号分割请求
  • 设置请求头类型,对应请求数据的类型
  • 注意请求头和发送数据之间必须要有空行
  • 注意post数据的格式要符合(以前规定的)数据库中数据的格式。
 
服务端解析json数据、获取json数据。
 
 
const express = require('express');
 
 
const app = express();
 
 
const mongoose =require('mongoose');
app.use(require('cors')())
 
app.use(express.json());
// 容许express处理提交到服务器的json数据。
 
//发送的post请求的json数据在req.body中储存。
// 在数据库中新增 一个数据
 
app.post('/products',async (req,res) => {
    const data =req.body;
    const product =await Product.create(data);
    res.send([data,product]);
})
app.listen(3000,()=>{
console.log("App is listening on port: 3000!")
})
相关文章
相关标签/搜索