2015-01-25 4 views
1

Я пытаюсь связать две мои схемы мангуста, используя идентификаторы, присвоенные mongoose (_id) У меня есть схема пользователей и схема серверов, каждый сервер должен иметь 1 пользователь в качестве владельца, но у каждого пользователя может быть много серверов. Поэтому я сохраняю req.user.id (from passportJS) в схеме сервера, и есть массив в схеме пользователей, где я хочу нажимать идентификаторы для серверов, когда они создаются. Я еще не успел использовать заполнение, потому что не понимаю, как взять идентификатор с сервера, который должен быть создан, и направить его на массив серверов пользователей.Ссылка на схемы мангуста с использованием идентификаторов, выталкиваемых в массив?

. Вот моя схема серверов:

var mongoose = require ('mongoose'); 
var timestamps = require('mongoose-times'); 
var Schema = mongoose.Schema; 

var ServerSchema = new Schema({ 
    name: String, 
    imgurl: String, 
    address: String, 
    port: String, 
    tags: Array, 
    votifier :{ 
     enabled: Boolean, 
     address: String, 
     port: String, 
     pubKey: String 
    }, 
    ownerID: {type: Schema.ObjectId, ref: 'User'}, 
    upvotes: {type: Number, default: 0} 
}); 

ServerSchema.plugin(timestamps); 


module.exports = mongoose.model('Server', ServerSchema); 

Вот мои пользователи схема:

var mongoose = require('mongoose'); 
var bcrypt = require('bcrypt-nodejs'); 
var timestamps = require('mongoose-times'); 
var Schema = mongoose.Schema; 

var userSchema = Schema({ 
    local  :{ 
     username: {type: String, required: true}, 
     password: {type: String, required: true} 
    }, 
    email: {type: String, required: true}, 
    imgId: String, 
    servers: [{type: Schema.ObjectId, ref: 'Server'}] 
}); 

userSchema.plugin(timestamps); 

//methods 
//gen hash 
userSchema.methods.generateHash = function(password, next){ 
    bcrypt.hash(password, bcrypt.genSaltSync(8), null, next); 
    console.log(password + ': Password has generated hash'); 
}; 

userSchema.methods.validPassword = function(candidatePassword, cb) { 
    bcrypt.compare(candidatePassword, this.local.password, function(err, isMatch){ 
     if(err) return cb(err); 
     cb(null, isMatch); 
    }); 
}; 

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

Как я могу взять _ID сервер, который создается и толкать его в массив в схеме пользователя, который я findByID используя OwnerId сервера схема?

Любая помощь была бы оценена, также если это полный неправильный способ делать подобные вещи, пожалуйста, дайте мне знать! Благодаря

ответ

0

Вы можете создать новый сервер вроде:

newServer = new ServerSchema(...); 

Затем сохраните его:

newServer.save(callback); 

Обратный вызов должен быть определить, чтобы делать все, что вы хотите сделать с фактическим сохраненным результатом. Допустим, что у вас есть функция updateUser, которые получают userId и serverId, и он подталкивает serverId пользователю этого идентификатора. Затем ваш обратный вызов должен быть чем-то вроде ...

callback = function(serverSaveErr, serverSavedDoc) { 
    if (serverSaveErr) { handle errors ... } 
    else { updateUser(userId, serverSavedDoc._id } 
} 
Смежные вопросы