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

4 投票
2 回答
4033 浏览
提问于 2025-04-16 13:03

我在MongoDB里有这样的文档:

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

你可以看到,"pages"这个键是一个包含其他文档的数组。现在我可以通过页面的名称来查询这个文档,这样我就能得到完整的文档,包括所有页面和其他信息。我在Python中直接使用pymongo来查询这个文档,但现在我不知道从"pages"数组中获取单个页面的最佳方法是什么。我想大概是这样的:

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

但这真的是获取单个页面或一般嵌入文档的最佳方法吗?欢迎任何建议或代码片段。

谢谢!
Jarus

2 个回答

0

请查看MongoDB网站上的“获取字段的子集”

我希望这对你有帮助。

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'.

然后你需要遍历所有的嵌套文档,找到你需要的那个页面。

如果你经常需要加载嵌套文档,可能需要重新设计一下你的数据库(比如把页面移到根集合中),不过我觉得你的结构看起来没什么问题。

撰写回答