2016-03-30 2 views
0

Я пытался заполнить таблицу пользователей и не увенчался успехом. Любая помощь будет оценена по достоинству.Mongoose.populate() не показывает никаких изменений в DB

Я проверяю переменную isProvider

if(true) 
    then the data is saved in a provider table 
else 
    in a customer table. 

Я хочу стол, чтобы пользователь таблица Auth, поэтому я хочу, чтобы заполнить поле «идентификатор пользователя» в этих моделях. Идентификатор сохраняется. Когда я печатаю результаты заполнения, он показывает заполненный json, но когда я вижу его в базе данных, он показывает только Id. Я хочу получить доступ к деталям таблицы пользователей через таблицу фотографов. Как мне это достичь?


модель пользователя

/* 
* Title: User model 
*/ 
var mongoose = require('mongoose'), 
Schema = mongoose.Schema, 
passportLocalMongoose = require('passport-local-mongoose'); 
var bcrypt = require('bcrypt-nodejs'); 
//Data model 
var UserSchema = new Schema({ 
    email: { 
     type: String, 
     unique: true, 
     required: true 
    }, 
    password: { 
     type: String, 
     required: true 
    }, 
    token: String, 
    mobile: String, 
    type: String, 
    createdOn: {type: Date, default: Date.now}, 
    lastModifiedOn: {type: Date}, 
    deleted: {type: Number, default: 0}, 
    isPhotographer: {type: Boolean, default: false}, 
    verified: {type: Boolean, default: false} 
}); 


UserSchema.pre('save', function(next) { 
    var user = this; 
    if(this.isModified('password') || this.isNew) { 
     bcrypt.genSalt(10, function (err, salt) { 
      if(err) { 
       return next(err); 
      } 
      bcrypt.hash(user.password, salt, null, function (err, hash) { 
       if (err) { 
        return next(err); 
       } 
       user.password = hash; 
       next(); 
      }); 
     }); 
    } else { 
     return next(); 
    } 
}); 

UserSchema.methods.comparePassword = function (passw, cb) { 
    bcrypt.compare(passw, this.password, function(err, isMatch) { 
     if(err) { 
      return cb(err); 
     } 
     cb(null, isMatch); 
    }); 
}; 

UserSchema.plugin(passportLocalMongoose); 

user = mongoose.model('User', UserSchema); 
module.exports = user; 

Provider модель

var mongoose = require('mongoose'), 
Schema = mongoose.Schema; 
var User = require('./User'); 

//Data model 
var providerSchema = new Schema({ 
    userId: { 
     type: Schema.Types.ObjectId, 
     ref: 'User' 
    }, 
    firstName: String, 
    lastName: String, 
    profilePicture: { 
     type: mongoose.Schema.Types.ObjectId, 
     ref: 'GFS' 
    }, 
    email: String, 
    phone: Number, 
    address: String, 
    dob: Date, 
    createdOn: {type: Date, default: Date.now}, 
    lastModifiedOn: {type: Date}, 
    deleted: {type: Number, default: 0}, 

}); 

providerSchema.pre('save', function(next) { 
    this.lastModifiedOn = new Date; 
    next(); 
}); 

provider= mongoose.model('provider', providerSchema); 
module.exports = provider; 

модель клиента

var mongoose = require('mongoose'), 
Schema = mongoose.Schema; 
var User = require('./User'); 
//Data model 
var customerSchema = new Schema({ 
    userId: { 
     type: mongoose.Schema.Types.ObjectId, 
     ref: 'User', 
    }, 
    firstName: String, 
    lastName: String, 
    createdOn: {type: Date, default: Date.now}, 
    lastModifiedOn: {type: Date}, 
    deleted: {type: Number, default: 0}, 

}); 

customerSchema.pre('save', function(next) { 
    this.lastModifiedOn = new Date; 
    next(); 
}); 

customer = mongoose.model('Customer', customerSchema); 
module.exports = customer; 

Контроллер

if(user.isProvider) { 
         var provider= new providermodel({ 
          userId: user._id, 
          firstName: req.body.firstName, 
          lastName: req.body.lastName 
         }); 
         provider.save(function(err, docs) { 
          if(!err) { 

           pprovidermodel.findOne({_id: provider._id}).populate('userId').exec(function(err, docs) { 
            if(err) { 
            console.log(err); 
            } 
            else { 
            console.log(docs); ----> **Here populate works, but no changes in the database** 
            console.log("SO " + docs.userId.email); 
            } 
           }) 
          } 
         }) 
        }else { 
         var customer = new customermodel({ 
          userId: user.id, 
          firstName: req.body.firstName, 
          lastName: req.body.lastName 
         }); 
         customer.save(function(err) { 
          if(!err) { 
           customermodel.findOne({}).populate('userId').exec(function(err, docs) 
           { 
            console.log(err); 
            console.log(docs); 
           }) 
          } 
         }) 
        } 

ответ

0

Я думаю, что это правильно. Заполнение не меняет значения в базе данных, только извлекает значения при запуске кода.

Смежные вопросы