我正在尝试构建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"
}
我尝试使用Mongoose的populate
:
Article.findOne({_id: "1234"})
.populate('tags', 'name -_id')
.exec()
.then(article => { /* ... */ })
我得到了
{
"title": "JavaScript Basics",
"category": {"name": "JavaScript"}
// compare to: "category": "JavaScript"
}
所以我必须处理category
,我觉得这不是很优雅。有没有办法解决这个问题?
另外,我在想是否可以通过id"来查找" find类别。代码为猫鼬的吸气剂和二传手:
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中实现这些功能?
感谢。
答案 0 :(得分:0)
每当你填充时,populate应该出现在回调函数之前,因为我们需要填充的对象,所以我们把它放在.exec()之前。
Article.findOne({_id: "1234"}).populate('tags', 'name').exec(function(err,article){})