在我的mongodb帖子集中获取所有类别的最佳方式是什么

在我的mongodb帖子集中获取所有类别的最佳方式是什么,mongodb,express,Mongodb,Express,我正在使用Express、MongoDB和React开发一个博客应用程序。我肯定更喜欢使用关系数据库,但我想更喜欢基于文档的数据库,所以我就在这里 我有一个处于当前状态的帖子集,如下所示: [ { "id": "001", "category": "fishing", "title": "jigs", &q

我正在使用Express、MongoDB和React开发一个博客应用程序。我肯定更喜欢使用关系数据库,但我想更喜欢基于文档的数据库,所以我就在这里

我有一个处于当前状态的帖子集,如下所示:

[
    {
        "id": "001",
        "category": "fishing",
        "title": "jigs",
        "body": "Lorem ipsum dolor sit amet, consectetu"
    },
    {
        "id": "002",
        "category": "cooking",
        "title": "tuna casserole",
        "body": "Lorem ipsum dolor sit amet, consectetur"
    },
...]
当你进入url/posts时,你会得到所有的帖子,当你进入url/posts/cooking时,你当然会得到cooking

当我在前端处理存根数据时,我从json文件中创建了一个类别列表,如下所示:

const uniqueCategories = [
    ...new Set(props.posts.map((post) => post.category)),
];
但是,我是按类别获取帖子的,如下所示:

useEffect(() => {
    async function fetchPosts() {
        fetch(`api/posts/${category}`)
            .then((res) => res.json())
            .then(
                (result) => {
                    setPosts(result);
                    console.log('result', result);
                }
            );
    }
    fetchPosts();
}, [category]);
我还没有实现所有类别,但这并不重要。现在,如果我得到烹饪类别,我上面的uniqueCategories函数将只映射烹饪

所以问题是。构建此架构的最佳方式是什么

我应该有一个类别集合吗?在posts集合中,我应该引用categories集合的id吗


还是有更好的方法?

这取决于您的应用程序及其查询

选择1 若你们只想得到所有文章的类别,你们可以只索引你们的类别和使用方法。缺点是不能为类别添加其他字段,例如类别说明

代码示例:

db.posts.createIndex({category:1});//为类别字段创建索引
db.posts.distinct(“类别”)/[“钓鱼”、“烹饪”]
选择2 创建类别集合:

{
_id:“钓鱼”,
...
}
您不需要使用MongoDB default ObjectId作为
\u id
,因为类别名称是唯一的,您可以将类别名称设置为
\u id
,这也允许您在不进行任何额外查找的情况下获取帖子类别名称。使用此选项,可以为类别添加其他字段,例如:

{
_id:“钓鱼”,
名称:“钓鱼”,
描述:“所有钓鱼爱好者的类别!”
}
然后在您的
post
集合中,您可以使用category
\u id
作为category值

{
“id”:“001”,
“类别”:“捕鱼”,
“标题”:“夹具”,
“正文”:“Lorem ipsum dolor sit amet,Concertetu”
},
若你们想得到分类列表,你们可以直接查询分类集合