MongoDB:从子数组创建另一个集合? (多对多的关系)

时间:2011-12-05 21:18:59

标签: mongodb

假设我在我的收藏中有'电影'对象,如下图所示。电影有许多演员,演员属于很多电影。许多一对多。

如何创建另一个由独特的“actor”元素组成的集合?请记住,一些演员将被列入多部电影中。

{
    "_id" : ObjectId("4edcffa5f320646bc8bd76b4"),
    "directed_by" : [
        "John Gilling"
    ],
    "forbid:genre" : null,
    "genre" : [ ],
    "guid" : "#9202a8c04000641f8000000000b02e5d",
    "id" : "/en/pirates_of_blood_river",
    "initial_release_date" : "1962",
    "name" : "Pirates of Blood River",
    "starring" : [
        {
            "actor" : {
                "guid" : "#9202a8c04000641f800000000006823e",
                "id" : "/en/christopher_lee",
                "name" : "Christopher Lee",
                "lc_name" : "christopher lee"
            }
        },
        {
            "actor" : {
                "guid" : "#9202a8c04000641f80000000001de22e",
                "id" : "/en/oliver_reed",
                "name" : "Oliver Reed",
                "lc_name" : "oliver reed"
            }
        },
        {
            "actor" : {
                "guid" : "#9202a8c04000641f80000000003b41da",
                "id" : "/en/glenn_corbett",
                "name" : "Glenn Corbett",
                "lc_name" : "glenn corbett"
            }
        }
    ]
}

1 个答案:

答案 0 :(得分:0)

这可以在客户端应用程序中完成,也可以通过mongodb中的聚合完成 - 例如,您可以使用输出集合运行mapreduce作业。在地图步骤中,给定一个电影文档,你可以发出键值对(actor.guid,{[other actor details]}),并在reduce步骤中只返回一组细节(你也可以计算一下这个数字)如果你想的话,演员在这一点上的电影。

http://www.mongodb.org/display/DOCS/MapReduce有更多关于语法的信息。