我有一个模型“类别”。集合categories
包含多个对象。
我也有一个模型“邮政”。集合posts
可能包含许多具有用户帖子的对象。 “发布”对象可能涉及1个以上的类别。如何将“发布”对象链接到1+“类别” - 对象而不将“发布” - 对象放在“类别” - 对象作为子文档?当然,我需要有一个选项来查找与某个类别相关的所有帖子。
我可以想象的一种方法是存储与其相关的所有类别的“发布” - 对象obj_id。像这样的Smth:
var postSchema = mongoose.Schema({
title: String,
description: String,
category: [ObjectId],
created_time: Number,
})
稍后再添加类别......
post.category.push(obj_id);
但真的是一种猫鼬的方式吗?哪种方式是正确的?感谢。
P.S。我也读过mongoose docs中的种群方法,在我的情况下它可能有用吗?我还不完全清楚这是什么。
答案 0 :(得分:20)
Populate是一个更好的工具,因为您在帖子和类别之间创建了多对多的关系。当子文档专属于父对象时,它们是合适的。您需要更改postSchema以使用引用:
var postSchema = mongoose.Schema({
title: String,
description: String,
category: [{ type: Schema.Types.ObjectId, ref: 'Category' }],
created_time: Number,
});
您可以通过将文档推送到阵列来添加类别:
post.category.push(category1);
post.save(callback);
然后在查询期间使用populate:
重新水化它们Post.findOne({ title: 'Test' })
.populate('category')
.exec(function (err, post) {
if (err) return handleError(err);
console.log(post.category);
});