如何在MongoDB中标准化数据模型/ JSON?

时间:2019-03-04 02:21:59

标签: java json mongodb

我是MongoDB JSON文件开发的新手。我正在寻找包含另一个JSON文件生成参考站点的JSON文件。下面是我的原始JSON文件。

[ {
    "Post" : {
        "id" : 1,
        "title" : "Title 1",
        "created_date" : "2018-12-01 11:10:13.247",
        "body" : " 국회는 헌법 또는 ....",
        "user" : {
            "username" : "joseph",
            "password" : "password"
        },
        "tags" : {
            "tag" : [
                {
                    "id" : 1,
                    "created_Date" : "2018-12-02 11:10:13.247",
                    "body" : "첫 글의 댓글입니다.",
                    "user" : {
                        "username" : "jina",
                        "password" : "password"
                    }
                },{
                    "id" : 2,
                    "created_Date" : "2018-12-03 11:10:13.247",
            "body" : "첫 글의 두번째 댓글입니다.",
            "user" : {
                        "username" : "julian",
                        "password" : "password"
                    } } ] } }   
}
,
{
    "post" : {
        "id" : 2,
        "title" : "Title 2",
        "created_date" : "2018-12-03 11:10:13.247",
        "body" : "제안된 헌법개정안은 대통령이 ....",
        "user" : {
            "username" : "joseph",
            "password" : "password"
        },
        "tags" : {
            "tag" : [
                {
                    "id" : 1,
                    "created_Date" : "2018-12-02 11:10:13.247",
                    "body" : "댓글 입니다.",
                    "user" : {
                        "username" : "julian",
                        "password" : "password"
                    } } ] } }   
}]

如您所见,在每个后置文档上都重复了“ user”和“ tag”元素。因此,我尝试将这些元素划分为类似模块的文件,并可以在Post JSON文件中引用这些元素。但是我不知道如何将这些JSON数据分为另一个JSON文件。

"user" : {
            "username" : "joseph",
            "password" : "password"
        }

[ {
    "Post" : {
        "id" : 1,
        "title" : "Title 1",
        "created_date" : "2018-12-01 11:10:13.247",
        "body" : " 국회는 헌법 또는 ....",
        "$ref" : user,
        "$ref" : tag 

我希望在“发布” JSON上重用“用户” JSON元素。

2 个答案:

答案 0 :(得分:1)

我想这不是一个JSON inside JSON问题,更多的是关于mongoDB中的数据建模。您正在应用程序中使用嵌入式数据模型,并且需要使用references遵循归一化数据模型,以避免重复。

MongoDB在designing the data models上有不错的文档,请看。

enter image description here

答案 1 :(得分:0)

据我了解,您希望将可重复部分与主集合(表)分开。要实现您的想法,您可以按照以下步骤操作。

  1. 创建2个不同的集合以保留有关main的详细信息 集合(表)和可重复项。
  2. 然后,您可以在主集合上保留可重复的项目集合参考。
  3. 当您需要阅读记录时,请使用join获取全部详细信息。

更多信息: https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/