【发布时间】:2017-06-02 08:50:30
【问题描述】:
有谁知道为什么“用户”和“帖子”(用户可以有很多帖子)之间的以下一对多关系不起作用?看来我已经正确设置了我的猫鼬关联,但是当创建新帖子时,不仅没有分配了用户,而且用户本身也没有与 any 关联> 帖子。我不确定我在这里可能做错了什么。
如果您看到下面的 JSON 对象,它应该有一个 user 值,表示创建帖子的用户。您将在下面的帖子模型中看到,应该创建用户值,但没有。
我做错了什么?
这是创建新帖子后的 JSON 对象
{
__v: 0
_id: "587ee8f5a99b1709b012ce8f"
createdAt: "2017-01-18T04:03:01.446Z"
message: "This is my first test post!"
updatedAt: "2017-01-18T04:03:01.446Z"
}
问题:为什么上面的 JSON 中缺少 user 字段,尽管它是在下面的 Post 模型中创建的?
这是我的帖子模型:
// Setup dependencies:
var mongoose = require('mongoose');
// Setup a schema:
var PostSchema = new mongoose.Schema (
{
message: {
type: String,
minlength: 2,
maxlength: 2000,
required: true,
trim: true,
}, // end message field
user: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
},
},
{
timestamps: true,
}
);
// Instantiate our model and export it:
module.exports = mongoose.model('Post', PostSchema)
这是我的用户模型:
// Setup dependencies:
var mongoose = require('mongoose');
// Setup a schema:
var UserSchema = new mongoose.Schema (
{
username: {
type: String,
minlength: 2,
maxlength: 20,
required: true,
trim: true,
unique: true, // username must be unique
dropDups: true,
lowercase: true,
validate: {
validator: function(username) {
var regex = /^[a-z0-9_]+$/i;
return regex.test(username);
},
message: 'Username may contain only letters, numbers or underscores.',
},
}, // end username field
posts: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Post'
}],
},
{
timestamps: true,
});
// Instantiate our model and export it:
module.exports = mongoose.model('User', UserSchema)
这是查询数据库的控制器:
注意:这是提交表单时运行的方法。
// Grab our Mongoose Models:
var User = require('mongoose').model('User');
var Post = require('mongoose').model('Post');
module.exports = {
// Creates a new post for logged in user:
newPost: function(req, res) {
Post.create(req.body)
.then(function(newPost) {
return res.json(newPost);
})
.catch(function(err) {
return res.json(err);
})
}
};
有谁知道我的关联设置是否不正确,这就是为什么我没有让任何实际帖子或用户出现在他们各自的字段中的原因?
看来我的服务器端控制器正在正确触发,因为帖子实际上是创建的。但是这些关联本身并没有联系起来,我不确定我做错了什么。
【问题讨论】:
-
你的
req.body是什么?您是否假设创建Post时User应该自动更新? -
@cdbajorin 你是 100% 正确的,我错误地认为猫鼬会为我做一些关联,并且未能将我的新消息推送到我的 user.posts,并更新 post.user 以反映用户 ID。我几乎找到了解决方案,一旦完成,我将在这里发布我是如何解决的!感谢您花时间阅读!
标签: javascript node.js mongoose one-to-many mean-stack