我正在尝试使用由mongoose(_id)指定的ID链接我的两个猫鼬模式 我有一个用户架构和一个服务器架构,每个服务器应该有1个用户作为所有者,但每个用户可以有许多服务器。所以我将req.user.id(来自passportJS)保存在服务器模式中,并且在用户模式中有一个数组,我想在创建服务器时为服务器推送ID。我还没有完全使用populate,因为我不明白如何从即将创建的服务器获取ID并将其推送到用户服务器阵列
这是我的服务器架构:
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并将其推送到用户模式中的数组,我将使用服务器模式中的OwnerID找到该ID?
任何帮助将不胜感激,如果这是完全错误的方式做这种事情请告诉我!感谢
答案 0 :(得分:0)
您可以像这样创建一个新服务器:
newServer = new ServerSchema(...);
然后保存:
newServer.save(callback);
应该定义回调以执行您想要对实际保存的结果执行的任何操作。假设您有一个函数updateUser接收userId和serverId,它将serverId推送到该Id的User。 然后你的回调应该是......
callback = function(serverSaveErr, serverSavedDoc) {
if (serverSaveErr) { handle errors ... }
else { updateUser(userId, serverSavedDoc._id }
}