当一个前端菜鸡需要做一个全栈的毕设项目,真的是太不容易了,特别是我这种数据库还特别渣的人。
新接触的mongodb,很多语法也还没了解透彻,对于所谓的集合嵌套或者集合引用真的是一窍不通,但是最后还是得实现啊,感谢这位大神的分享,这位大哥的详解真的是十分到位,我终于搞懂了
我的实现过程
前期需求:
用户集合、粉丝集合。为了将用户集合和粉丝集合相关联,然后获取到每个用户对应的粉丝和所关注的人
代码实现:
node后端代码
在models文件夹下新建用户模型(user.js)和粉丝模型(fans.js)
//user.js文件 (用户模型)
//引入mongoose模块
const mongoose = require('mongoose')
const Schema = mongoose.Schema
//定义数据模型,可以看到,我们下面创建了一个表,表中的数据有字段,并且这些字段的数据类型也定义了,最后将model导出即可
const userSchema = new Schema({
username : String,
password : String,
avatar : String,
sex : String,
number : String,
email : String,
birth : String,
type : String,
}, { collection: 'user'})
//这里mongoose.Schema最好要写上第二个参数,明确指定到数据库中的哪个表取数据,我这里写了myhreo,目的就是为了以后操作数据要去myhreo表中。
//这里不写第二个参数的话,后面你会遇到坑。
//导出model模块
const User = module.exports = mongoose.model('user',userSchema);
// fans.js (粉丝模型)
//引入mongoose模块
const mongoose = require('mongoose')
const Schema = mongoose.Schema
//定义粉丝模型
const fansSchema = new Schema({
parent_name : String,
fans_name : String,
}, { collection: 'fans'})
const Fans = module.exports = mongoose.model('fans',fansSchema);
然后在需要的路由下(在router文件夹下建立一个userrouter.js)引用以上模型,写好后端的接口
//引入express模块
const express = require("express");
//定义路由级中间件
const router = express.Router();
//引入数据模型模块
const User = require("../models/user");
const Fans = require("../models/fans");
//添加用户
router.post('/addUser', function (req, res) {
User.findOne({
username: req.body.username //用户名不重复
}, function (err, data) {
if (data) {
res.send({
flag: 1, //用户名已存在
des:'用户名已存在'
})
} else {
User.create(req.body, function (err, data) {
if (err) throw err;
res.send({
flag: 0, //注册成功
des:'用户添加成功'
})
})
}
})
})
//添加粉丝
router.post('/addFans', function (req, res) {
Fans.create(req.body, function (err, data) {
if (err) throw err;
res.send({
flag: 0, //注册成功
des:'用户添加成功'
})
})
})
})
// 查询所有用户信息路由
router.get('/userList', function (req, res) {
User.aggregate([{ $lookup: { from: 'fans', localField: 'username', foreignField: 'parent_name', as: 'myfans' } },
{$lookup:{from:'fans',localField:'username',foreignField:'fans_name',as:'myloves'}}], function (err, data) {
if (err) throw err;
res.send(data)
});
});
然后在前端调用接口获取全部用户信息即可看到你要的效果了(返回粉丝myfans和关注myloves的用户情况,因为我要显示的是数量,所以就直接用myfans.length来获取数字了)
小白的全栈进阶之路真的不容易啊,感谢各路网友大神们的博客简书分享,你们太重要了