在pymongo中获取嵌入式文档的最佳方法是什么?

时间:2011-03-05 16:06:41

标签: python mongodb pymongo

我在MongoDB文件中有这样的:

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

您可以看到键“pages”是包含其他文档的数组。现在我可以使用页面名称查询此文档,我将获得包含所有页面和其他信息的完整文档。我在python中使用直接pymongo来查询文档,但现在我不知道从数组页面获取页面的最佳方法是什么。我想是这样的:

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

但这是获得单页或一般嵌入式文档的最佳方式吗?我们欢迎所有的tipps或代码片段。

谢谢! Jarus

2 个答案:

答案 0 :(得分:2)

是的,你是对的。在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'.

您需要遍历所有嵌入式文档,找到您需要的查找页面。

如果您经常需要加载嵌入式文档,那么您需要重新设计数据库(将页面移动到根集合,但在我看来,您的架构都可以。)

答案 1 :(得分:0)

请阅读mongodb网站上的Retrieving a Subset of Fields

我希望它会对你有所帮助。