在MongoDB中,如何获取费用中包含用户名“quot;X";

在MongoDB中,如何获取费用中包含用户名“quot;X";,mongodb,nosql,Mongodb,Nosql,我在MongoDB有两个收藏 用户(查找()): 和项目(findOne()): } 我展示了一个findOne()项目集合,但我想知道它如何也是find() 我该如何获得所有任务,其中费用有用户名“vinixhenri”?用户标识符是tasks->responsible 我还想知道我在保留用户id方面是否做得对?这是正确的,我必须查阅用户信息,然后重新查询项目信息的数据库?或者我应该在集合中复制有关用户任务的信息吗?在2.2版之前(您将拥有:或者甚至是聚合框架),最合适的方法是: 返回包含一

我在MongoDB有两个收藏

用户(查找()):

和项目(findOne()):

}

我展示了一个findOne()项目集合,但我想知道它如何也是find()

我该如何获得所有任务,其中费用有用户名“vinixhenri”?用户标识符是tasks->responsible


我还想知道我在保留用户id方面是否做得对?这是正确的,我必须查阅用户信息,然后重新查询项目信息的数据库?或者我应该在集合中复制有关用户任务的信息吗?

在2.2版之前(您将拥有:或者甚至是聚合框架),最合适的方法是:

  • 返回包含一个或多个任务的所有根文档,并由特定用户在客户端对其进行筛选,以在与该用户相关的项目中仅获取那些可以很好地工作的任务

  • 运行一个MR(不推荐),它会每隔一段时间将您的文档重新格式化为您需要的格式

注意:MR不会是实时的,但是你可以让客户端实时过滤,我个人会选择在客户端过滤

我还想知道我在保留用户id方面是否做得对?它是 正确,我必须查阅用户信息,然后重新查询 项目信息数据库?或者我应该复制信息吗 关于集合中用户的任务


是的,这很好,性能也很好。例如,假设用户更改了用户名,您不想查看所有更改用户名的项目文档,是吗?必须查询一个外部行来检索所有信息更新,这会带来费用,但也会带来好处。在这种情况下,将用户数据复制到项目文档中是不好的。

请注意,您不能使用Map/Reduce来就地更新集合。。这将允许一些有趣的递归悲伤:)。不过,您可以合并到现有的输出集合中。请看。@Stennie确实,MR将不得不输出到另一个集合,而忽略了该部分。
{ "_id" : ObjectId("5021314e372c50859ced7063"), "name" : "Vinícius", "username" : "vinixhenri", "password" : "vinix123" }
{ "_id" : ObjectId("50213180372c50859ced7064"), "name" : "André", "username" : "andre", "password" : "andre123" }
{
    "_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"
            }
    ]