背景:允许用户发布投票的应用程序。
我在用户模型中填充对民意调查模型的引用时遇到了一些麻烦。我正在使用 mongoose.populate 尝试填充民意调查。在我的 route ,填充函数无法正常工作(返回的用户为空)。这是我的模型...
用户.js:
// models/users.js
var mongoose = require('mongoose'),
Poll = require('./poll');
//define the schema for our user model
var userSchema = mongoose.Schema({
local:{
email: String,
password: String,
name: String
},
twitter:{
id: String,
token: String,
name: String
},
polls:[{type: mongoose.Schema.Types.ObjectId, ref:'Poll'}]
});
poll.js:
//load mongoose
var mongoose = require('mongoose'),
User = require('./user');
var pollSchema = mongoose.Schema({
name:String,
options:[String],
creator: {type:mongoose.Schema.Types.ObjectId, ref:'User'}
});
module.exports = mongoose.model('Poll', pollSchema);
这是我要在...中实现人口的路线
//require user and poll model
var User = require('../models/user'),
Poll = require('../models/poll');
app.post('/dashboard', isLoggedIn, function(req,res){
var poll = {name: req.body.name,
options: req.body.option,
creator: req.user.local.id};
//create new poll
var newPoll = new Poll();
newPoll.polls = poll;
//find the user with the request id and populate polls reference in User (UserSchema)
User.findById(req.user.local.id)
.populate('polls')
.exec(function(err,user){ // cant figure this out...
if(err){return err;}
console.log(user); // yields null
res.send({success:true, message: "Post Successful!"});
});
});
任何帮助、建议、想法将不胜感激。谢谢。
最佳答案
Mongoose 的种群是一个很棒的功能。从我在您的代码中看到的,您似乎没有将池分配给用户。您有引用用户内部池的第一部分,但没有引用池内部用户的第二部分, Mongoose 需要两者来执行操作。
我认为您希望池有一个名称和选项列表。我在您的代码中看到的是一个包含池数组的池,因此我更改了池架构以适应您的解释。
尝试使用此新池架构在池中添加对用户的引用:
pool.js
var mongoose = require('mongoose');
var pollSchema = mongoose.Schema({
name:String,
options:[String],
creator: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }
});
module.exports = mongoose.model('Poll', pollSchema);
现在,保存池时,不要忘记添加您的用户引用。您正在为用户填充池,因此 Mongoose 回调中传递的对象将不是池列表,而是您要查找的用户。多亏了population,您将在属性pools
中获得对象列表,而不是ID列表。
var User = require('../models/user'),
Poll = require('../models/poll');
app.post('/dashboard', isLoggedIn, function(req,res){
var poll = {
name: req.body.name,
options: req.body.option,
creator: req.user.local.id
};
var newPoll = new Poll();
newPoll.polls = poll;
User.findById(req.user.local.id)
.populate('polls')
.exec(function(err, user){
/*
You should get in user object something like:
{
local: {...},
twitter: {...},
pools: [{
name: 'Pool1',
options: [...]
}]
}
*/
});
});
});
关于javascript - 在另一个模型中引用/填充 Mongoose 模型时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34644018/