美文网首页
三张表连表查询实例

三张表连表查询实例

作者: Wrestle_Mania | 来源:发表于2019-12-06 15:52 被阅读0次
  • app.js
const UserModel = require("./model/user");
const ArticleModel = require("./model/article");
const ArticlecateModel = require("./model/articlecate");

// // 用户新增
// const user = new UserModel({
//   username: "JonSnow1",
//   password: "123456",
//   name: "雪诺1",
//   age: 22,
//   sex: "女",
//   tel: "17777777777"
// });
//
// user.save(err => {
//   if (err) {
//     console.log(err);
//     return;
//   }
//   console.log("user新增成功");
// });

// // 分类的增加
// const articlecate = new ArticlecateModel({
//   title: "信阳新闻",
//   descripton: "信阳新闻"
// });
//
// articlecate.save(err => {
//   if (err) {
//     console.log(err);
//     return;
//   }
//   console.log("user新增成功");
// });

// // 文章新增
// const article = new ArticleModel({
//   title: "河南新闻2",
//   cid: "5dea007bcce50d21fc260efd",
//   author_id: "5dea028ad55add1bd0d2aff7",
//   author_name: "雪诺",
//   descripton: "河南新闻:稀土的股票一直在涨,好后悔没有买啊12121",
//   content: "河南新闻:稀土的股票一直在涨,好后悔没有买啊12121121"
// });
//
// article.save(err => {
//   if (err) {
//     console.log(err);
//     return;
//   }
//   console.log("article新增成功");
// });
  • model/user.js
const mongoose = require("./db");

const UserSchema = mongoose.Schema({
  username: {
    type: String,
    unique: true
  },
  password: String,
  name: String,
  age: Number,
  sex: String,
  tel: String,
  status: {
    type: Number,
    default: 1
  }
});

const UserModel = mongoose.model("User", UserSchema, "user");

module.exports = UserModel;
  • model/article.js(使用$lookup进行查询)
const mongoose = require("./db");
const Schema = mongoose.Schema;

const ArticleSchema = Schema({
  title: {
    type: String,
    unique: true
  },
  // 分类id
  cid: {
    type: Schema.Types.ObjectId
  },
  // 用户id
  author_id: {
    type: Schema.Types.ObjectId
  },
  author_name: {
    type: String,
    default: "JonSnow"
  },
  descripton: String,
  order: {
    type: Number,
    default: 100
  },
  content: String
});

const ArticleModel = mongoose.model("Article", ArticleSchema, "article");

module.exports = ArticleModel;
  • model/article.js(使用 populate 实现关联查询)
const mongoose = require("./db");
const Schema = mongoose.Schema;

const ArticleSchema = Schema({
  title: {
    type: String,
    unique: true
  },
  // 分类id
  cid: {
    type: Schema.Types.ObjectId,
    ref: "Articlecate"
  },
  // 用户id
  author_id: {
    type: Schema.Types.ObjectId,
    ref: "User"
  },
  author_name: {
    type: String,
    default: "JonSnow"
  },
  descripton: String,
  order: {
    type: Number,
    default: 100
  },
  content: String
});

const ArticleModel = mongoose.model("Article", ArticleSchema, "article");

module.exports = ArticleModel;
  • model/articlecate.js
const mongoose = require("./db");

const ArticlecateSchema = mongoose.Schema({
  title: {
    type: String,
    unique: true
  },
  descripton: String,
  addtime: {
    type: Date
  }
});

const ArticlecateModel = mongoose.model(
  "Articlecate",
  ArticlecateSchema,
  "articlecate"
);

module.exports = ArticlecateModel;

先按照上面的流程加一波数据

  • $lookup查询
const ArticleModel = require("./model/article");

ArticleModel.aggregate(
  [
    {
      $lookup: {
        from: "user",
        localField: "author_id",
        foreignField: "_id",
        as: "user"
      }
    },
    {
      $lookup: {
        from: "articlecate",
        localField: "cid",
        foreignField: "_id",
        as: "articlecate"
      }
    }
  ],
  (err, docs) => {
    if (err) {
      console.log(err);
      return;
    }
    console.log(JSON.stringify(docs, null, 2));
  }
);
  • 使用 populate 实现关联查询(注意这里要关联的表都要引入进来)
const ArticleModel = require("./model/article");
const ArticlecateModel = require("./model/articlecate");
const UserModel = require("./model/user");

ArticleModel.find({})
  .populate("author_id")
  .populate("cid")
  .exec((err, docs) => {
    if (err) {
      console.log(err);
      return;
    }
    console.log(JSON.stringify(docs, null, 2));
  });

相关文章

  • 三张表连表查询实例

    app.js model/user.js model/article.js(使用$lookup进行查询) mode...

  • 连表查询实例

    查询是酸奶的商品信息(查完一张表,用返回值再去查另外一张表) 连表查询

  • sql _ 连表查询 & 授权

    一,连表查询 1)连表 简单查询_where 2) 连表 多种方式查询 3)子查询 综合以上查询示例 二,DCL数...

  • SQL语句集锦

    携带条件连表子查询(条件查询表b后的结果用来查询表a):SELECT a.* FROM 表a AS a INNE...

  • 连表查询

    看上一篇帖子的表结构

  • 2021-08-29

    数据模型: 插入数据: 查询数据: 两表,连查询研究: 单表查询研究: 结果; 三表联查 结果: 项目思路:"""...

  • Django 中的聚合查询与分组查询

    聚合 常用的聚合函数 Avg, Max, Min 实例1 实例2 分组 emp表模型 总结 :跨表分组查询本质就...

  • 两句SQL(部门有多少员工;薪资等级)

    三张表,部门表,员工表,薪资表 1.查询每个部门有多少人2.给一个员工编号,确定其薪资水平 -----------...

  • thinkphp 5.1的with和传统的join场景测试

    1. 传统业务查询方式 传统业务查询方式在涉及连表操作的时候一般用join连表,大约有一下缺点。 有的时候连表过多...

  • 22《MySQL 教程》JOIN 表连接

    前面小节介绍了表的设计三范式和单表的查询,本小节介绍如何将通过多个表进行关联查询数据,其中连表查询包括 LEFT ...

网友评论

      本文标题:三张表连表查询实例

      本文链接:https://www.haomeiwen.com/subject/iflegctx.html