mongodb结合node查询数据

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的那个地方,写它的目的是为了方便理解
👐没有人
🤲比我
👌更懂
☝️

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值