首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pymongo:多对多映射

pymongo:多对多映射
EN

Stack Overflow用户
提问于 2011-12-27 10:54:04
回答 1查看 129关注 0票数 0

我有一个包含相册和照片数据的数据库,相册中包含多张照片,照片也可以包含在多个相册中。

例如)

代码语言:javascript
复制
**photo collection**
photo_id    album_ids
1           [11 12 13 14]
2           [11 12 15 16]
**album collection**
album_id    photo_ids
11          [1 2]
12          [1 6]

现在我想列出属于一个用户的所有照片(这意味着多个相册)。我能找到的方法是使用一个嵌套的for循环来获取所有的照片,将其放入一个列表中,并使用id号(这意味着时间顺序)对其进行排序。

代码语言:javascript
复制
for album in all the user's albums:
    get photos belonging to this album
        put it to global list
sort it

有没有更简单的方法可以做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2011-12-27 15:57:54

在没有连接逻辑的情况下,你基本上需要做两个查询:

  1. 加载用户并获取其相册列表。
  2. 查询用户相册列表中相册id所在的照片。

当您有多对多关系时,这是MongoDB中的一种常见模式。在服务器上没有连接的情况下,基本上必须在客户机上编写自己的连接。

我能找到的方法是使用嵌套的

循环来获取所有照片,将其放入一个列表中,并使用id号对其进行排序(这意味着时间顺序)

对于您所拥有的结构,这基本上就是您所能做的。另外,请注意MongoDB ObjectId is not monotonically。如果要按ID排序,则必须是您自己的ID。

还要注意,您可以在album_ids字段的photos上创建索引,以加快查询速度。但是,如果您计划使用.sort()并让服务器为您排序,则该字段需要是同一索引的一部分,否则将抛出错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8640753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档