0

我在 MongoDB 中有两个集合

用户(查找()):

{ "_id" : ObjectId("5021314e372c50859ced7063"), "name" : "Vinícius", "username" : "vinixhenri", "password" : "vinix123" }
{ "_id" : ObjectId("50213180372c50859ced7064"), "name" : "André", "username" : "andre", "password" : "andre123" }

和项目(findOne()):

{
    "_id" : ObjectId("50215d09ddf7410905000000"),
    "name" : "Projeto X",
    "local" : "/home/server/compartilhamento/htdocs/project_x/",
    "permissions" : [
            {
                    "user" : "5021314e372c50859ced7063",
                    "alter" : true,
                    "view" : true,
                    "delete" : true,
                    "view_task" : true,
                    "insert_task" : true,
                    "alter_task" : true,
                    "delete_task" : true
            },
            {
                    "user" : "50213180372c50859ced7064",
                    "alter" : true,
                    "view" : true,
                    "delete" : false,
                    "view_task" : false,
                    "insert_task" : false,
                    "alter_task" : false,
                    "delete_task" : false
            }
    ],
    "tasks" : [
            {
                    "responsible" : "5021314e372c50859ced7063",
                    "description" : "Ajuste na barra lateral do site"
            },
            {
                    "responsible" : "5021314e372c50859ced7063",
                    "description" : "Ajuste no cabeçalho do site"
            },
            {
                    "responsible" : "50213180372c50859ced7064",
                    "description" : "Ajuste no rodapé do site"
            }
    ]

}

我展示了一个 findOne() 项目集合,但我想知道它怎么会是一个 find() 。

我将如何获得所有收费的用户名为“vinixhenri”的任务?用户标识符是任务->责任。

我还想知道我在保留 _id 用户方面做得对吗?是不是必须先查阅用户信息,然后再从数据库中查询项目信息?或者我应该在集合中复制有关用户任务的信息?

4

1 回答 1

0

直到 2.2(您将拥有:https ://jira.mongodb.org/browse/SERVER-828甚至聚合框架)之前最合适的方法是:

  • 返回具有一个或多个任务的所有 Root 文档,并由特定用户在客户端过滤掉它们,以便仅在与该用户相关联的那些项目中获得那些可以很好地工作的任务。

  • 运行一个 MR(不那么推荐),它会每隔一段时间重新格式化您的文档,使其符合您的需要。

注意:MR 不会是实时的,但是您可以使客户端过滤实时,因此我个人会选择在客户端过滤掉它。

我还想知道我在保留 _id 用户方面做得对吗?是不是必须先查阅用户信息,然后再从数据库中查询项目信息?或者我应该在集合中复制有关用户任务的信息?

是的,这很好而且性能很好。例如说用户更改了他们的用户名你不想通过所有的项目文档来改变他们的用户名是吗?必须查询外部行来检索所有信息更新会带来费用,但也会带来好处。在这种情况下,将用户数据复制到项目文档中会很糟糕。

于 2012-08-08T13:03:20.503 回答