【发布时间】:2017-09-23 21:48:16
【问题描述】:
我正在尝试构建一个 CMS,我可能在 DB 中有这样的东西:
// an article in Article collection
{
"_id": ObjectId("1234"),
"title": "JavaScript Basics",
"category": ObjectId("0001")
}
// a category in Category collection
{
"_id": ObjectId("0001"),
"name": "JavaScript"
}
出于某些原因,我必须将类别放在集合中,而不是嵌入文档中。 获取文章时,我想获取这样的信息:
{
"title": "JavaScript Basics",
"category": "JavaScript"
}
我尝试使用猫鼬的populate:
Article.findOne({_id: "1234"})
.populate('tags', 'name -_id')
.exec()
.then(article => { /* ... */ })
我得到了
{
"title": "JavaScript Basics",
"category": {"name": "JavaScript"}
// compare to: "category": "JavaScript"
}
所以我必须处理category,我认为这不是很优雅。有没有办法解决这个问题?
另外,我正在考虑是否可以将“按 id 查找类别”代码放入 mongoose 的 getter 和 setter:
ArticleSchema.path('category')
.set(function(categoryName) {
// find categoryId by categoryName and set it
})
.get(function(categoryId) {
// find category name by id and return it
});
如果它有效就很好,我不需要面对前面提到的问题。但是这里似乎不支持异步代码(按id查找类别),是否有可能在mongoose的setter和getter中实现这些东西?
谢谢。
【问题讨论】:
标签: node.js mongodb mongoose mongoose-populate