从mongodb文档中选择记录的正确方法是什么

时间:2013-04-29 18:53:00

标签: asp.net mongodb database nosql

我是 mongodb 的新手,我非常喜欢noSql的想法。

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

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

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

我想要检索的结果

   {
    PostTitle:"This is a blog post",
    Posted:"12/12/2012",
    ByUsertId:"2",
    Body:"This is a simple body"
    Comments:
    [
        {
            PostedBy:"someUser",
            Text:"Hi There!",
            CalculatedVotes:
            [
                {
                    VoteType:"AGREE",
                    Caption="I agree!",
                    Count:2
                },
                {
                    VoteType:"NOT_AGREE",
                    Caption="No Way!",
                    Count:1
                },
            ]
        },
        {
            PostedBy:"someUser2",
            Text:"Whats up?",
            CalculatedVotes:
            [
                {
                    VoteType:"AGREE",
                    Caption="I agree!",
                    Count:1
                },
                {
                    VoteType:"NOT_AGREE",
                    Caption="No Way!",
                    Count:2
                },
            ]
        }
    ]

    }

文档结构

{
    PostTitle:"This is a blog post",
    Posted:"12/12/2012",
    ByUsertId:2,
    Body:"This is a simple body"
    Comments:
    [
        {
            PostedBy:"someUser",
            Text:"Hi There!",
            Votes:
            [
                {
                    VoteType:"AGREE",
                    Caption="I agree!",
                    IP:"1.1.1.1"
                },
                 {
                    VoteType:"NOT_AGREE",
                    Caption="No Way!",
                    IP:"2.2.2.2"
                },
                 {
                    VoteType:"AGREE",
                    Caption="I agree!",
                    IP:"3.3.3.3"
                }
            ]
        },
        {
            PostedBy:"someUser2",
            Text:"Whats up?",
            Votes:
            [
                {
                    VoteType:"NOT_AGREE",
                    Caption="No Way!",
                    IP:"1.1.1.1"
                },
                 {
                    VoteType:"NOT_AGREE",
                    Caption="No Way!",
                    IP:"2.2.2.2"
                },
                 {
                    VoteType:"AGREE",
                    Caption="I agree!",
                    IP:"3.3.3.3"
                }
            ]
        }
    ]

}

1 个答案:

答案 0 :(得分:0)

我想说最好重新考虑你的架构。描述了存储层次结构的一个很好的例子here

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

最后但并非最不重要的一点是,处理计数的最佳方法是在记录投票时实时增加投票数,以避免重新计算投票的开销,并且还有额外的好处,您可以通过投票或如果需要,甚至可以通过投票进行索引。