我有一个包含相册和照片数据的数据库,相册包含多张照片,照片也可以包含在多个相册中。
例如)
**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
有没有更简单的方法来做到这一点?
答案 0 :(得分:1)
由于无法访问连接逻辑,您基本上必须执行两个查询:
只要您拥有多对多关系,这就是MongoDB中的常见模式。如果服务器上没有JOIN,您基本上必须在客户端上编写自己的连接。
我可以找到的方法是使用嵌套for循环来获取所有照片,将其放入列表并使用id编号对其进行排序(这意味着时间顺序)
凭借您拥有的结构,这基本上就是您可以做的一切。另请注意,MongoDB ObjectId
不单调增加。如果您要按ID排序,则必须是您自己的ID。
另请注意,您可以在photos
字段的album_ids
上创建索引,以便快速查询。但是,如果您打算使用.sort()
并让服务器为您排序,那么该字段必须是同一索引的一部分,否则会引发错误。