Лучший способ получить вложенные документы в пимонго? - PullRequest
4 голосов
/ 05 марта 2011

У меня есть в MongoDB документы вроде этого:

{
"user": ObjectID("4d71076b26ab7b032800009f")
"pages" : [
    {
        "name" : "Main",
        "content" : [
            {
                "id" : ObjectId("4d71076b26ab7b052800009f")
            },
            {
                "id" : ObjectId("4d61269b1deb5a3fce000004"),
                "link" : "http://example.com"
            }
        ]
    }
]}

Вы можете видеть, что ключ "страницы" является массивом с другими документами.Теперь я могу запросить этот документ с именем страницы, и я получу полный документ со всеми страницами и другой информацией.Я использую в python напрямую pymongo для запроса документа, но сейчас я не знаю, как лучше всего получить страницу из массива страниц.Я думаю, что-то вроде этого:

def getPage(pageNameWhoINeed):
    for page in pages:
        if page['name'] == pageNameWhoINeed:
           return page

Но это лучший способ получить отдельную страницу или вообще встроенный документ?Все советы или фрагменты кода приветствуются.

Спасибо!Jarus

Ответы [ 2 ]

2 голосов
/ 05 марта 2011

Да, вы правы. В mongodb вы не можете загрузить вложенный документ без родителя. Вы можете загрузить родительский документ некоторым свойством дочернего документа.

pages.find({"pages.name", "Main"}); //should load all document that contains pages  collection and at least one item in embedded collection with name 'Main'.

Чем вам нужно перебрать все вложенные документы и найти нужную вам страницу.

Если вам часто нужно загружать встроенный документ, мб, вам нужно изменить дизайн базы данных (переместить страницы в корневую коллекцию, но мне кажется, что все в порядке с вашей схемой).

0 голосов
/ 09 марта 2011

Пожалуйста, прочитайте Получение подмножества полей на сайте mongodb.

Я надеюсь, что это поможет вам.

...