1. 程式人生 > >mongoose 主鍵關聯的表,自動帶出另一張表的資料

mongoose 主鍵關聯的表,自動帶出另一張表的資料

 

有這樣兩張表

addon_passwordbox_category
'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)

'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)

addon_passwordbox_list

二張表使用catId作為主鍵關聯 現在查 addon_passwordbox_list 表時要自動帶出關聯的addon_passwordbox_category表的資料 

 

使用 

populate()

程式碼如下:

 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)
        }
      })
  },

此外還可以這樣用

.populate({
  path: 'fans',
  match: { age: { $gte: 21 }},
  select: 'name -_id',
  options: { limit: 5 }
})