1、安装数据库

Install MongoDB Community Edition — MongoDB Manualj

2、windows用户启动数据库

mongod --depath d:/data/db

数据库默认安装文件夹下面会有data的文件夹,启动时最好将数据库的地址指向该文件夹下面的db;同时官网有详细的启动教程,参考官网;在自己的本地,可以通过下载相关的命令行脚本工具来进行使用,在这里下载的是mongoDB-Shell窗口脚本,具体使用官方网站有说明(打开直接使用mongsh即可实现)。同时,注意一下,bin目录下的都是二进制文件可执行脚本,一般的窗口命令都是在该文件下的。

3、数据库的基本操作

db  // 查询当前数据库
show dbs // 查询所有数据库
use <data base name> // 创建/切换数据库
db.dropDataBase()   // 删除数据库


use gp145
db/db.getName()
show dbs
db.createCollection('movies')
db.stats()
db.version()
db.getMongo() //connection to 127.0.0.1:27017
db.dropDatabase()

4、集合操作(集合相当于table)

二、集合操作
db.createCollection(<collection name>)  // 创建一个集合
db.getCollectionNames() // 得到当前数据库所有集合


db.createCollection('users')
db.getCollectionNames()

5、文档操作

提示:这里的文档(docuiment)可以是以下的这一种形式

document={<filed1-key>:<field1-value>...}

①插入数据

db.<collectionName>.insertOne(<document>)   // 插入一条数据
db.<collectionName>.insertMany([<document>...]) // 插入多条数据


db.users.insertOne({username: 'yangli', password: 'abc123'})
db.users.insertOne({username: 'haozeliang', email: 'hzl@126.com'})
db.users.insertOne({"username": 1, password: 123})
db.users.insertMany([{username: 'gaojie', password: 'gj', email: 'gj@126.com'}, {username: 'xinyi', password: 123, email: 123}])
db.users.insert([{username: 'yangli'}, {useranme: 'zeliang'}])
db.users.save()

②修改数据

2、修改数据->document1:查询 ; document2:修改的数据
// 修改数据
db.<collectionName>.update(document1,{$set:<document2>})  
// 自增加数据,doc2中的field必须是整数
db.<collectionName>.update(document1,{$inc:<document2>})  
// 自减加数据,doc2中的field必须是整数
db.<collectionName>.update(document1,{$dec:<document2>})  
db.<collectionName>.update(document1,{$set:<document2>}, <找不到数据就创建数据:bool>, <如果找到多条数据是否批量添加:bool>)



db.users.update({username: 'yangli'}, {username: 'yl'})
// 1、如果第二个参数是一个对象,后边两个参数无效
// 2、如果第二个参数是通过$set设置的话, 后两个参数才有效
// 3、后两个参数的第一个参数:true/如果数据查询不到,就创建 false/如果数据查询不到,就什么都不做
// 4、后两个参数第第二个参数:true/更新多条,false/更新一条
db.users.update({username: 'gp145'}, {$set: {username: 'yl'}}, true, true)
// 5、如果使用updateMany, 就不需要传递后两个参数第二个了
db.users.updateMany({username: 'yl'}, {$set: {username: 'yangli'}})

③删除数据

db.<collectionName>.remove(<document>)


④查询数据

db.<collectionName>.find()  // 查询所有数据
db.<collectionName>.find(<document>)  // 查询特定字段的数据
db.<collectionName>.find({<filed-key>: {$gt: <filed-value>}})  // 查询特定字段大于xxx的数据
db.<collectionName>.find({<filed-key>: {$gte: <filed-value>}})  // 查询特定字段大于等于xxx的数据
db.<collectionName>.find({<filed-key>: {$lt: <filed-value>}})  // 查询特定字段小于等于xxx的数据
db.<collectionName>.find({<filed-key>: {$lte: <filed-value>}})  // 查询特定字段小于等于xxx的数据
db.<collectionName>.find({<filed-key>: {$lte: <filed-value>, $gt: <filed-value>}})
db.<collectionName>.find({<field-key>: <regular expression>})   // 正则匹配查找
db.<collectionName>.find({$or:[{<field-key: field-value}, {field-key1: field-value1}]}) // or查找
db.<collectionName>.distinct('<field-key>')  // 查询所有该字段的所有数据,并去重复,返回列表
db.<collectionName>.find({}, {<field-key1:0|1, field-key2:0|1}  // 指定查找后返回的字段,0表示不要,1表示要
db.<collectionName>.find().sort({<field-key>:-1|1})  // 根据字段<field-key>进行排序,-1降序,1升序
db.<collectionName>.find().limit(<number>)  // 限制查询字段的结果,只拿number个数据
db.<collectionName>.find().limit(<number>).skip(<number_>)  // 跳过number_条数据才开始取number条数据
db.<collectionName>.find().count()  // 获取数据一共有多少条


db.movies.find({}, {nm: 1, _id: 0, rt: 1})
db.movies.find({}, {nm: 1, _id: 0, rt: 1}).sort({rt: -1})
db.movies.find({}, {nm: 1, _id: 0, rt: 1}).limit(10)
db.movies.find({}, {nm: 1, _id: 0, rt: 1}).sort({rt: -1}).limit(10)
db.movies.find({}, {nm: 1, _id: 0, rt: 1}).sort({rt: -1}).limit(3).skip(6)
db.movies.find({rt: {$gte: '2019-10-14'}}, {nm: 1, _id: 0, rt: 1})
db.movies.find({rt: {$gte: '2019-10-14'}}, {nm: 1, _id: 0, rt: 1})
db.movies.find({rt: {$gte: '2019-10-14'}}, {nm: 1, _id: 0, rt: 1}).count()
db.movies.find({rt: {$lte: '2019-10-14'}}, {nm: 1, _id: 0, rt: 1}).count()
db.movies.find({nm: /小/}, {nm: 1, _id: 0, rt: 1}).sort({rt: -1})

6、express框架连接数据库

===1、数据库连接===
const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost:27017/lagou-admin', { useUnifiedTopology: true, useNewUrlParser: true })

const Users = mongoose.model('users', {
  username: String,
  password: String
})

module.exports = {
  Users
}

===2、路由route===
var express = require('express')
var router = express.Router()

const { signup, hasUsername } = require('../controllers/users')

router.post('/signup', hasUsername, signup)

module.exports = router

===3、数据库模型Model===
const { Users } = require('../utils/db')

const save = (data) => {
  const users = new Users(data)
  return users.save()
}

const findOne = (conditions) => {
  return Users.findOne(conditions)
}

module.exports = {
  save,
  findOne
}

===4、模板视图===
// art-template + express
{
  "ret": true,
  "data": {{data}}
}

===5、视图函数,这里是异步函数===
const usersModel = require('../models/users')

const signup = async function(req, res, next) {
  res.set('Content-Type', 'application/json; charset=utf-8')

  let { username, password } = req.body

  let result = await usersModel.save({
    username,
    password: hash
  })

  if (result) {
    res.render('succ', {
      data: JSON.stringify({
        message: '用户注册成功.'
      })
    })
  } else {
    res.render('fail', {
      data: JSON.stringify({
        message: '用户注册失败.'
      })
    })
  }
}

const hasUsername = async function(req, res, next) {
  res.set('Content-Type', 'application/json; charset=utf-8')
  let { username } = req.body
  let result = await usersModel.findOne({username})
  if (result) {
    res.render('fail', {
      data: JSON.stringify({
        message: '用户名已经存在.'
      })
    })
  } else {
    next()
  }
}

module.exports = {
  signup,
  hasUsername
}

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐