MongoDB: Создать другую коллекцию из подмассива?(отношения многие ко многим) - PullRequest
1 голос
/ 06 декабря 2011

Предположим, у меня есть "пленочные" объекты, подобные приведенному ниже, в моей коллекции. В фильмах много актеров, а актеры принадлежат ко многим фильмам. Многие-ко-многим.

Как мне создать другую коллекцию, состоящую из уникальных «актерских» элементов? Помните, что некоторые актеры будут перечислены в более чем одном фильме.

{
    "_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 голосов
/ 06 декабря 2011

Это можно сделать в клиентском приложении, но также с помощью агрегирования в mongodb - например, вы можете запустить задание mapreduce с выходной коллекцией. На шаге карты для данного документа фильма вы можете генерировать пары значений ключа (actor.guid, {[другие подробности об актере]}), а на шаге сокращения просто возвращать один набор деталей (вы также можете посчитать число фильмов, в которых был актер, если хотите.

http://www.mongodb.org/display/DOCS/MapReduce содержит дополнительную информацию о синтаксисе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...