繁体   English   中英

在3模式上填充mongoose

[英]Populate mongoose on 3 schema

我正在尝试填充Schema。 我已经成功填充了2个架构。 但是我对填充3模式有困难/理解。

这些是我的架构

成员架构

var mongoose = require('mongoose');
var bcrypt = require('bcryptjs');
var Schema = mongoose.Schema;

var MemberSchema = new mongoose.Schema({

    full_name : {
        type: String
    },
    current_position : {
        type: String
    },
    position: {
        type: String
    },
    dateStarted : {
        type: String
    },
    is_admin: {
        type: Boolean,
        default : false
    },
    team : {
        type: Schema.Types.ObjectId,
        ref: 'Team'
    },
    account : {
        type: Schema.Types.ObjectId,
        ref : 'Accounts'
    }
});

var Members = module.exports = mongoose.model('Members', MemberSchema);
module.exports.createMember = function(newMember, callback){

    newMember.save(function(err){
        if (err) throw err;
    });

}

帐户架构

var mongoose = require('mongoose');
var bcrypt = require('bcryptjs');
var Schema = mongoose.Schema;
var Team = require('../model/team');


var AccountSchema = mongoose.Schema({
    account_name:{
        type: String,
        index:true
    },
    account_type:{
        type: String
    },
    website_url:{
        type: String
    },
    description:{
        type: String
    },
    account_owner:{
        type: String
    },
    phone_number:{
        type: String
    },
    industry:{
        type: String
    }
});

var accounts = module.exports = mongoose.model('Accounts', AccountSchema);

module.exports.createAccount = function(newUser, callback){

    newUser.save(function(err){
        if (err) throw err;
    });

}

团队架构

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;

var TeamSchema = new mongoose.Schema({
    team_name : {
        type: String
    },
    dateCreated : {
        type : Date,
        default:function(){
            return Date.now();
        }
    }
});

var Team = module.exports = mongoose.model('Team', TeamSchema);


module.exports.createTeam = function(newTeam, callback){

    newTeam.save(function(err,teamObj){
        if (err) throw err;
        if(teamObj){
            if(typeof callback == 'function'){
                callback(null, teamObj._id); 
            }
        }
    });

}

这是我已经填充的团队架构和成员架构

[
  {
    "_id": "587f276edebe7725c48e7286",
    "full_name": "joel ralph balignasay",
    "position": "Web Developer",
    "dateStarted": "Nov 15 2016",
    "team": {
      "_id": "587f25a98a583e1954908832",
      "team_name": "Web Team",
      "__v": 0,
      "dateCreated": "2017-01-18T08:22:01.541Z"
    },
    "account": "587f210d7729b13554901cf4",
    "__v": 0,
    "is_admin": false
  }
]

这是我的功能

app.get('/admin/accounts/show_team/api/merge', function(req,res){
    var team_id = '587f25a98a583e1954908832';
    var account_id = '587f210d7729b13554901cf4';
    MemberModel.find({}).populate('team').exec(function(err,member){
        Accounts.find({}).populate('account').exec(function(err,acount){
            if (err) {
                console.log(err)
            } else {
                res.json(member);
            }
        });
    });
});

谢谢。 我只是想知道如何插入帐户架构。 再次感谢

我已经找到了一种方法,这是我更新的功能

app.get('/admin/accounts/show_team/api/merge', function(req,res){
    var team_id = '587f25a98a583e1954908832';
    var account_id = '587f210d7729b13554901cf4';
    var member_id = '587f276edebe7725c48e7286';
    MemberModel.findById(member_id)
        .populate('team')
        .populate('account')
        .exec(function(err,results){
            res.send(results);
        })
});

您甚至可以限制人口之后所需的字段,如下所示

app.get('/admin/accounts/show_team/api/merge', function(req,res){
    var team_id = '587f25a98a583e1954908832';
    var account_id = '587f210d7729b13554901cf4';
    var member_id = '587f276edebe7725c48e7286';
    MemberModel.findById(member_id)
        .populate('team', 'teamField1, teamField2, teamField3..')
        .populate('account', 'accountField1, accountField2...')
        .exec(function(err,results){
            res.send(results);
        })
});

_id总是默认出现。 如果您只想要_id,请执行此操作

app.get('/admin/accounts/show_team/api/merge', function(req,res){
    var team_id = '587f25a98a583e1954908832';
    var account_id = '587f210d7729b13554901cf4';
    var member_id = '587f276edebe7725c48e7286';
    MemberModel.findById(member_id)
        .populate('team', '_id')
        .populate('account', '_id')
        .exec(function(err,results){
            res.send(results);
        })
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM