0

我是mongodb的新手,我真的很喜欢 noSql 的想法。

我正在尝试建立一个博客,人们可以在每个评论上点击评分按钮并对个人评论进行评分。

在每条评论中,我都有一系列投票,其中有投票类型和唯一 IP。每个用户点击按钮都会插入一行(每个 IP 一次)。

最后,我想查询文档/帖子并获取以下结构中的信息,CalculatedVotes,distinct VoteType,Caption 和 count

我要检索的结果

   {
    PostTitle:"这是一篇博文",
    发表于:“2012 年 12 月 12 日”,
    ByUsertId:"2",
    身体:“这是一个简单的身体”
    注释:
    [
        {
            发布者:“某些用户”,
            文本:“你好!”,
            计算票数:
            [
                {
                    投票类型:“同意”,
                    Caption="我同意!",
                    计数:2
                },
                {
                    投票类型:“NOT_AGREE”,
                    Caption="不行!",
                    计数:1
                },
            ]
        },
        {
            发布者:“someUser2”,
            文本:“怎么了?”,
            计算票数:
            [
                {
                    投票类型:“同意”,
                    Caption="我同意!",
                    计数:1
                },
                {
                    投票类型:“NOT_AGREE”,
                    Caption="不行!",
                    计数:2
                },
            ]
        }
    ]

    }

文件结构

{
    PostTitle:"这是一篇博文",
    发表于:“2012 年 12 月 12 日”,
    ByUsertId:2,
    身体:“这是一个简单的身体”
    注释:
    [
        {
            发布者:“某些用户”,
            文本:“你好!”,
            投票:
            [
                {
                    投票类型:“同意”,
                    Caption="我同意!",
                    IP:“1.1.1.1”
                },
                 {
                    投票类型:“NOT_AGREE”,
                    Caption="不行!",
                    IP:“2.2.2.2”
                },
                 {
                    投票类型:“同意”,
                    Caption="我同意!",
                    IP:“3.3.3.3”
                }
            ]
        },
        {
            发布者:“someUser2”,
            文本:“怎么了?”,
            投票:
            [
                {
                    投票类型:“NOT_AGREE”,
                    Caption="不行!",
                    IP:“1.1.1.1”
                },
                 {
                    投票类型:“NOT_AGREE”,
                    Caption="不行!",
                    IP:“2.2.2.2”
                },
                 {
                    投票类型:“同意”,
                    Caption="我同意!",
                    IP:“3.3.3.3”
                }
            ]
        }
    ]

}
4

1 回答 1

0

我想说最好的办法是重新考虑你的模式。此处描述了存储层次结构的一个很好的示例。

在您的架构中,您会遇到多个问题,其中最重要的是,如果讨论变得很长,您最终会得到一个最终超过最大文档大小 (16MB) 的巨大文档。此外,您只需要获取一些文档,但即使您不想要它,您也总是会得到巨大的完整讨论(并且很难根据嵌入结构的深度进行过滤)。

最后但并非最不重要的一点是,处理计票的最佳方法是在您记录选票时实时增加选票计数,以避免重新计算它们的开销,并且您可以按选票排序甚至按索引排序。如果需要投票。

于 2013-04-29T19:05:05.653 回答