安装教程
https://blog.csdn.net/HTouying/article/details/88428452
可视化
https://blog.csdn.net/li_jiazhi/article/details/103218619
命令行操作
show dbs 查看所有数据库(查不出来自己创建的空数据库, 必须放一张表)
db 查看当前数据库
use 数据库名 创建/切换数据库
db.createCollection("user") 创建表
db.dropDatabase() 删除库, 不用传参
db.getCollection("acconut") 查询指定名称的表
db.getCollectionNames() 查询当前库中所有的表
db.printCollectionStats() 查询所有表的状态
db.account.drop() 删除account表
增删改
db.user.save({name:"张三", age: 12}) 新增
db.user.find() 查询user表所有数据
db.u.save([{username:"zhang", age: 12}, {username:"zhang", age: 13}]) 批量插入数据, 要是没有这个表,会自动创建该表然后插入数据
db.u.remove({age: 12}) 删除数据 传空对象删除所有数据
db.u.update({username: "zhang"}, {age: 18}) 修改数据(会覆盖), 将username=zhang的数据改成age:18
db.u.update({username: "zhangsan"}, {$set:{age: 18}}) 修改数据, 不覆盖
db.u.update({username: "zhangsan"}, {$inc:{age: 10}}) 增加10
db.u.update({username: "zhangsan"}, {$inc:{age: -10}}) 减10
查询
db.u.find({username: "zhangsan"}) 查询username是zhangsan的
db.u.find({age: {$gt: 11}}) age>11
db.u.find({age: {$lt: 11}}) age<11
db.u.find({age: {$gte: 11}}) 大于等于
db.u.find({age: {$lte: 11}}) 小于等于
db.u.find({age: {$gte: 20, $lte: 25}}) age>=20并且<=25
db.u.find({username: /zhang/}) 模糊查询,username包含zhang
db.u.find({username: /i$/}) username以i结尾的
db.u.find({}, {username:1,_id:0}) 查询所有数据,显示username,不显示_id
db.u.find().sort({age:1}) 从小到大
db.u.find().sort({age:-1}) 从大到小
db.u.find().skip(2) 查询第2条之后的数据
db.u.find().skip(5).limit(5) 查询第5-10条数据
db.u.find().skip((pageNum-1)*10).limit(10) 公式,跳过几条数据, 显示几个, limit与*后面的数字一致
db.u.find({$or:[{username:"zhangsan"},{username:"lisi"}]}) 或者
db.u.find().count() 查询条数
node链接
npm i mongoose
// db.config.js中
// 连接数据库
const mongoose = require("mongoose")
// 数据库地址 端口号 数据库名
mongoose.connect("mongodb://127.0.0.1:27017/Wzx_test")
// 插入集合(表)和数据, 数据库Wzx_test会自动创建
------------------------------------------------------------
在www或者app.js中引入
// 引入数据库模块
require("../config/db.config.js")
------------------------------------------------------------------
model文件夹中创建UserModel.js文件 创建类型
const mongoose = require("mongoose")
// 类型限制
const userType = {
username: String,
password: String,
age: Number
}
// 会在mongoDB中创建users表 自动加上s mongoose.model("aaa") 就会创建aaas表 将类型传入
const userModel = mongoose.model("user", new mongoose.Schema(userType))
module.exports = userModel
------------------------------------------------------------------------
接口中 新增数据
// 导入模型
const userModel = require('../model/UserModel');
// 插入数据 返回的是promise对象
userModel.create({username, password, age}).then(data => {
console.log(data)
res.send() // 成功后返回数据
})
-------------------------------------------------------
修改数据(覆盖)
router.post('/update/:id', function(req, res, next) {
const {username, password, age} = req.body
// 修改数据 updateOne 只改一条数据 updateMany 修改所有查出来的数据
userModel.updateOne({_id: req.params.id}, {username, password, age}).then(data => {
console.log(data)
})
res.send(req.body)
})
修改指定的字段
userModel.updateOne({_id: req.params.id}, {$set: {password}}).then(data => {
res.send(req.body)
})
---------------------------------------------------------
删除数据
router.get("/del/:id", (req, res) => {
userModel.deleteOne({_id: req.params.id}).then(data => {
res.send({ok: 1})
})
})
查询所有数据
userModel.find().then(data => {
res.send(data)
}))
查询指定字段
userModel.find({}, ["username", "age"]).then(data => {
res.send(data)
})
排序
userModel.find({}, ["username", "age"]).sort({age: 1}).then(data => {
res.send(data)
})
查username是admin
userModel.find({username: "admin"}, ["username", "age"]).sort({age: 1}).then(data => {
res.send(data)
})
分页
userModel.find({}, ["username", "age"]).skip((page - 1) * limit).limit(limit).then(data => {
let list = data
userModel.find().count().then(data => {
res.send({
list,
count: data
})
})
})
RESTful接口规范
post新增 delete删除 put修改 get查询
// 响应新增的post请求
router.post('/', function(req, res, next) {
const {username, password, age} = req.body
// 插入数据
userModel.create({username, password, age}).then(data => {
console.log(data)
res.send(req.body)
})
})
// 响应修改的put请求
router.put('/:id', function(req, res, next) {
const {username, password, age} = req.body
// 修改数据 updateOne 只改一条数据 updateMany 修改所有查出来的数据
userModel.updateOne({_id: req.params.id}, {$set: {password}}).then(data => {
res.send(req.body)
})
})
// 响应删除的delete请求
router.delete("/:id", (req, res) => {
userModel.deleteOne({_id: req.params.id}).then(data => {
res.send({ok: 1})
})
})
// 响应get查询请求
router.get("/", (req, res) => {
const {page, limit} = req.query
userModel.find({}, ["username", "age"]).skip((page - 1) * limit).limit(limit).then(data => {
let list = data
userModel.find().count().then(data => {
res.send({
list,
count: data
})
})
})
})
graphql
前端按需请求数据
mvc
路由中
// 导入controller
const userController = require("../controllers/userController.js")
router.post('/', userController.addUser)
------------------------------------------------------------------------
controller中
// 导入service
const userService = require("../services/userService.js")
async function addUser (req, res, next) {
const {username, password, age} = req.body
// 插入数据
await userService.addUser(username, password, age)
res.send({ok: 1})
}
const userController = {
addUser,
}
module.exports = userController
service中
// 导入模型
const userModel = require('../model/UserModel');
function addUser(username, password, age) {
// 返回的promise对象
return userModel.create({username, password, age})
}
const userService = {
addUser
}
module.exports = userService