mongoose(Mongoose) – 将对象彼此链接而不重复

我有一个模型“类别”。 集合categories包含多个对象。 我也有一个模型“邮政”。 收集posts可能包含许多具有用户post的对象。 “发布”对象可能涉及1+类别。 如何将“Post”对象链接到1+“Category”对象,而不将“Post”对象放置在“Category”对象中作为子文档? 当然,我需要有一个选项来查找与某个类别相关的所有post。

我可以想象的一种方式是存储与其相关的所有类别的“发布” – 对象obj_id。 这样笑话:

 var postSchema = mongoose.Schema({ title: String, description: String, category: [ObjectId], created_time: Number, }) 

并稍后添加类别…

 post.category.push(obj_id); 

但它真的是一个mongoose的方式? 哪种方法是正确的? 谢谢。

PS我也读过关于mongoose文档中的人口方法,可能对我有用吗? 还是不完全清楚这是什么。

因为您正在创buildpost和类别之间的多对多关系,所以填充是一个更好的工具。 子文档仅适用于父对象时适用。 您将需要更改您的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); 

然后在查询期间使用填充来补充它们:

 Post.findOne({ title: 'Test' }) .populate('category') .exec(function (err, post) { if (err) return handleError(err); console.log(post.category); });