Ale*_*est 9 mongoose mongodb node.js
我有一个模型"类别".集合categories包含几个对象.我也有模特"帖子".集合posts可能包含许多具有用户帖子的对象."发布"对象可能涉及1 +类别.如何将"发布"对象链接到1+"类别" - 对象而不将"发布" - 对象放在"类别" - 对象作为子文档?当然,我需要有一个选项来查找与某个类别相关的所有帖子.
我可以想象的方法之一是存储在与其相关的所有类别的"Post"-object obj_id中.像这样的Smth:
var postSchema = mongoose.Schema({
title: String,
description: String,
category: [ObjectId],
created_time: Number,
})
Run Code Online (Sandbox Code Playgroud)
并在以后添加类别...
post.category.push(obj_id);
Run Code Online (Sandbox Code Playgroud)
但它真的是一种猫鼬的方式吗?哪种方式是正确的?谢谢.
PS我也读过mongoose docs中的人口方法,在我的案例中它可能有用吗?对我来说还不完全清楚这是什么.
mr.*_*eze 21
Populate是一个更好的工具,因为您在帖子和类别之间创建了多对多的关系.当子文档专属于父对象时,它们是合适的.您需要更改postSchema以使用引用:
var postSchema = mongoose.Schema({
title: String,
description: String,
category: [{ type: Schema.Types.ObjectId, ref: 'Category' }],
created_time: Number,
});
Run Code Online (Sandbox Code Playgroud)
您可以通过将文档推送到阵列来添加类别:
post.category.push(category1);
post.save(callback);
Run Code Online (Sandbox Code Playgroud)
然后使用populate在查询期间重新水化它们:
Post.findOne({ title: 'Test' })
.populate('category')
.exec(function (err, post) {
if (err) return handleError(err);
console.log(post.category);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8589 次 |
| 最近记录: |