2017-02-11 29 views
0

我是express/mongoose的新手,试图实现User-Post关系。也就是1:很多。猫鼬1:许多父关系不保存(说undefined)

我有两个models

// *models/user.js 

var mongoose = require('mongoose'); 

var userSchema = mongoose.Schema({ 
     email: {type: 'string'}, 
     password: {type: 'string'}, 
     posts: [{type: mongoose.Schema.Types.ObjectId, ref: 'Post'}] 
    }); 
module.exports = mongoose.model('User', userSchema); 

// *models/post.js 

var mongoose = require('mongoose'); 

var postSchema = mongoose.Schema({ 
    user : { type: mongoose.Schema.Types.ObjectId, ref: 'User' }, 
    body: String, 
    title: String 
}); 

module.exports = mongoose.model('Post', postSchema); 

server.js

Post = require('./models/post'); 
User = require('./models/user'); 

app.post('/api/posts',(req,res)=>{ 

    User.findOne({email: "valid_email"},(err, user)=>{ 

    var post = { 
     title: "Post 1 Title", 
     body: "Post 1 body", 
     user: user._id 
    } 
    Post.create(post, (err, post)=>{ 
     res.send(post); 
    }); 
    }); 
}); 

现在,这种做法正在保存属于与电子邮件 “VALID_EMAIL” 用户Post。我可以通过填充来扩展它的用户。

app.get('/post', (req,res)=>{ 
    Post.findOne(title: "Post 1 title") 
.populate('user') 
.exec(function (err, user) { 
    if (err) throw err; 
    console.log(user._id, user.email); 
    res.end(); 
}); 
}); 

我想产生在寻找一个用户会自动推送到用户posts.Not的回调Post只是它不是它是如何工作的,我不能手动推到“user.posts”。

它说不能“推”到undefined.When我console.log(user.posts)我得到undefined

它是如何产生一个邮政belongsTo一个用户,然后我可以填充用户只是它的id,但不能推送到用户?它给出了未定义的“user.posts”?

+0

非常感谢Ravi Shankar的正确编辑 –

回答

0

!!!我得到了它的工作。

app.post('/api/posts', (req,res)=>{ 
    User.findOne({id: _some_user_id}, (err,user)=>{ 
    var poster = user; 
    var post = {title: req.body.title, body: req.body.body, category: req.body.category, user: poster} 
    Post.create(post, (err,post)=>{ 
     res.send(post); 
     poster.posts.push(post); 
     poster.save(); 
    }); 
    }); 
});