在pymongo中获取嵌入文档的最佳方法是什么?
我在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
我希望这对你有帮助。
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'.
然后你需要遍历所有的嵌套文档,找到你需要的那个页面。
如果你经常需要加载嵌套文档,可能需要重新设计一下你的数据库(比如把页面移到根集合中),不过我觉得你的结构看起来没什么问题。