pymongo:多个到多个映射

时间:2011-12-27 02:54:04

标签: python mongodb pymongo

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

例如)

**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编号对其进行排序(这意味着时间顺序)。

for album in all the user's albums:
    get photos belonging to this album
        put it to global list
sort it

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

1 个答案:

答案 0 :(得分:1)

由于无法访问连接逻辑,您基本上必须执行两个查询:

  1. 加载用户并获取他的专辑列表。
  2. 查询用户相册列表中相册ID的照片。
  3. 只要您拥有多对多关系,这就是MongoDB中的常见模式。如果服务器上没有JOIN,您基本上必须在客户端上编写自己的连接。

      

    我可以找到的方法是使用嵌套for循环来获取所有照片,将其放入列表并使用id编号对其进行排序(这意味着时间顺序)

    凭借您拥有的结构,这基本上就是您可以做的一切。另请注意,MongoDB ObjectId 单调增加。如果您要按ID排序,则必须是您自己的ID。

    另请注意,您可以在photos字段的album_ids上创建索引,以便快速查询。但是,如果您打算使用.sort()并让服务器为您排序,那么该字段必须是同一索引的一部分,否则会引发错误。