Express 使用ID'链接mongoose模式;它被推到一个数组?

Express 使用ID'链接mongoose模式;它被推到一个数组?,express,mongoose,Express,Mongoose,我正在尝试使用mongoose分配的ID(_ID)链接我的2个mongoose模式 我有一个用户模式和一个服务器模式,每个服务器应该有一个用户作为所有者,但是每个用户可以有多个服务器。因此,我将req.user.id(来自passportJS)保存在服务器模式中,在users模式中有一个数组,我希望在创建服务器时为其推送id。我还没有完全使用populate,因为我不知道如何从即将创建的服务器获取ID并将其推送到users服务器阵列 以下是我的服务器架构: var mongoose = requ

我正在尝试使用mongoose分配的ID(_ID)链接我的2个mongoose模式 我有一个用户模式和一个服务器模式,每个服务器应该有一个用户作为所有者,但是每个用户可以有多个服务器。因此,我将req.user.id(来自passportJS)保存在服务器模式中,在users模式中有一个数组,我希望在创建服务器时为其推送id。我还没有完全使用populate,因为我不知道如何从即将创建的服务器获取ID并将其推送到users服务器阵列

以下是我的服务器架构:

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);
以下是我的用户模式:

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查找该数组


任何帮助将不胜感激,如果这是完全错误的方式做这种事情,请让我知道!谢谢

您可以创建这样的新服务器:

newServer = new ServerSchema(...);
然后保存它:

newServer.save(callback);
回调应该定义为对实际保存的结果执行任何操作。假设您有一个函数updateUser,它接收userId和serverId,并将serverId推送到该Id的用户。 那么你的回拨应该是

callback = function(serverSaveErr, serverSavedDoc) {
  if (serverSaveErr) { handle errors ... }
  else { updateUser(userId, serverSavedDoc._id }
}