gpt4 book ai didi

javascript - Mongoose JS 关系

转载 作者:行者123 更新时间:2023-11-30 10:03:44 26 4
gpt4 key购买 nike

所以我正在制作一个具有用户模型和帖子模型的快速应用。用户有很多帖子,每个帖子都属于一个用户。这是模型

用户.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var userSchema = new Schema({
_id : Number,
username: String,
password: String,
admin: Boolean,
posts: [{
type: Schema.Types.ObjectId,
ref: 'Post'
}]
});

module.exports = mongoose.model('User', userSchema);

post.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var postSchema = new Schema({
title: 'string',
content: 'string',
_author: {
type: Number,
ref: 'User'
}
});

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

首先,我不确定这是否是关联这两个模型的最佳方式,以便该帖子属于用户,但这就是这里的 mongoose 文档中的样子 http://mongoosejs.com/docs/populate.html

现在我想做的是当我到达这条路线时

router.post('/', function(req, res){
var post = new Post(req.body);


console.log(author.posts);

post.save(function(err){
if (err){
return res.send(err);
}

res.send({message: 'Post added!'});
});
});

我希望将帖子插入到用户帖子数组中。我一直在查看文档并相信 populate 方法是执行此操作的方法,但我似乎无法弄清楚如何使用它以及它是否真的将该帖子插入作者帖子数组。

我试过了,但它似乎没有达到我想要的效果

Post.findOne({
title: "The nip"
})
.populate('_author')
.exec(function (err, post) {
if (err) return handleError(err);
console.log('The creator is %s', post._author.username);
});

任何有关如何将创建的帖子放入其作者帖子数组的建议都将不胜感激!

最佳答案

我认为 mongoose-y 的方法是使用前/后中间件。例如,在保存帖子时,您可以将 mongoose 配置为自动保持用户集契约(Contract)步,如下所示:

post.js

var User = mongoose.model('User');

postSchema.pre('save', function(next) {
// Don't do anything unless this is a new Post being created
// If a Post's author can be changed you would also need to check for that here
if (!this.isNew) {
return next();
}

User.update({_id: this._author}, {
$push: {posts: this._id}
})
.then(function() {
next();
})
.then(null, function(err) {
// Whoops! Something broke. You may want to abort this update.
next(err);
});
});

您还可以设置一个类似的postSchema.post('remove', ...) 中间件来进行级联删除。

一些注意事项:

1) 像我上面那样只用一个参数调用 mongoose.model 将加载模型而不是定义它。使用它让模型相互引用。如果您要使用 Node module.exports,您可能会得到循环依赖。

2) 遵循@Rob 关于 ObjectId 的建议。除非有充分的理由,否则不要将您的 ID 更改为 Number。

关于javascript - Mongoose JS 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30356105/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com