doms表结构数据:
logData表数据结构:
代码部分
yarn add express bodyParser mongoose
//将包引入
const express = require("express");
const app = express();
const mongodb = require('mongodb');
const mongoose = require("mongoose");
//-------express配置------不用管--start
/*express允许跨域*/
app.all("*", function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header(
"Access-Control-Allow-Headers",
"Content-Type,Content-Length, Authorization, Accept,X-Requested-With"
);
res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
res.header("X-Powered-By", " 3.2.1");
if (req.method == "OPTIONS") res.send(200);
else next();
});
/*
false: 表示使用系统模块querystring来处理,也是官方推荐的
true: 表示使用第三方模块qs来处理
*/
app.use(bodyParser.urlencoded({
extended: false
}));
//-------express配置-------不用管--end
/*mongo配置*/
mongoose.connect('mongodb://localhost:27017/articledb', {
useUnifiedTopology: true,
useNewUrlParser: true,
keepAlive: 120
})
.then(() => console.log('数据库连接成功'))
.catch(err => console.log('数据库连接失败',err));
const Schema = new mongoose.Schema({
userName: String,
sex: String,
avt: String,
age: Number,
desc: String,
hrefId: Number
});
const DB = mongoose.model('Dom', Schema);
查询某一个用户的数据:
//sql:select userName,age,avt from doms where userName=name limit 1
app.get("/userInfo", function (req, res) {
let name = req.query.name;
//DB.find({
// userName: name
//})
//find:查找所有的,findOne:查找一条,此处最好用findOne
DB.findOne({
userName: name
}).select('userName age avt').
exec((err, data) => {
if (err) {
console.log(err);
} else {
res.json(data)
}
});
});
查询结果:
查询所有用户的数据
//select userName, age, hrefId, avt from doms where age>17 and age<43 and userName like '%沈%' limit 0,100 order by userName asc
app.get("/userList", function (req, res) {
DB
.find({
userName: /沈/
})
.where('age').gt(17).lt(43)
.skip(0)
.limit(100)
.sort({
userName: 1
})
.select('userName age hrefId avt')
.exec((err, data) => {
if (err) {
console.log(err);
} else {
res.json(data)
}
});
});
查询结果:
联表查询:
//sql:select userName,url,logData.content as logs from doms inner join logData on doms.hrefId=logData.id
app.get("/userList", function (req, res) {
let name = req.query.name;
let opt = [{
$lookup: {
from: "logData",
localField: "hrefId",
foreignField: "id",
as: "logs"
}
}, {
$project: {
"userName": 1,
"_id": 0,
"logs":"$logs.content",
"url": "$avt"
},
}]
if (name) {
opt.push({
// $match大概等于where
$match: {
"userName":name,
},
}, )
}
DB.aggregate(opt, (err, data) => {
if (err) {
console.log(err);
} else {
res.json(data)
}
});
});
上方用到了mongodbde聚合框架:详情
查询结果:
如果有不正确的地方,望指正,特别是sql的那个地方,写它的目的是为了方便理解
👐没有人
🤲比我
👌更懂
☝️