mongoose 主键关联的表,自动带出另一张表的数据

2022-02-14 20:46:05 浏览数 (1)

有这样两张表

代码语言:javascript复制
addon_passwordbox_category
代码语言:javascript复制
'use strict'
var mongoose = require('mongoose'),
  Schema = mongoose.Schema

/***
 * 加密后的密码表
 *2018年10月18日14:41:23
 */
var addon_passwordbox_list = new Schema({
  email: String,             // 用户邮箱
  title: String,             // 密码的标题
  encryptedPassword: String, // 加密后的密码
  catId: {type: Schema.Types.ObjectId, ref: 'addon_passwordbox_category'},             // addon-passwordbox-category表中对应的类别的_id
  desc: String,              // 密码的描述
  CreatedDate: {type: Date, default: Date.now()}         // 创建时间
})

mongoose.model('addon_passwordbox_list', addon_passwordbox_list)
代码语言:javascript复制
'use strict'
var mongoose = require('mongoose'),
  Schema = mongoose.Schema

/***
 * 密码的分类表
 *2018年10月18日14:41:23
 */
var addon_passwordbox_category = new Schema({
  email: String,             // addon-passwordbox-list表中的_id
  name: String,              // 没有加密的密码
  desc: String,              // 类别的描述
  CreatedDate: {type: Date, default: Date.now()}          // 创建时间
})

mongoose.model('addon_passwordbox_category', addon_passwordbox_category)
代码语言:javascript复制
addon_passwordbox_list

二张表使用catId作为主键关联 现在查 addon_passwordbox_list 表时要自动带出关联的addon_passwordbox_category表的数据

使用

代码语言:javascript复制
populate()

代码如下:

代码语言:javascript复制
 findAllByCondition: function (condition, callback) {
    addon_passwordbox_list
      .find(condition, {__v: 0})
      .lean()
      .populate('catId', 'id name')
      .exec(function (err, reply) {
        if (err) {
          callback(err || new Error('find all by conditon error'))
        } else {
          callback(null, reply)
        }
      })
  },

此外还可以这样用

代码语言:javascript复制
.populate({
  path: 'fans',
  match: { age: { $gte: 21 }},
  select: 'name -_id',
  options: { limit: 5 }
})

0 人点赞