Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pymongo:多对多映射_Python_Mongodb_Pymongo - Fatal编程技术网

Python pymongo:多对多映射

Python pymongo:多对多映射,python,mongodb,pymongo,Python,Mongodb,Pymongo,我有一个包含相册和照片数据的数据库,相册包含多张照片,照片也可以包含在多个相册中 (例如) 现在我想列出属于一个用户的所有照片(这意味着多个相册)。我可以找到的方法是使用一个嵌套的for循环来获取所有照片,将其放入一个列表中,并使用id编号(这意味着时间顺序)对其进行排序 有更简单的方法吗?由于无法访问连接逻辑,您基本上需要执行两个查询: 加载用户并获取他的相册列表 查询相册id位于用户相册列表中的照片 当您有多对多关系时,这是MongoDB中的常见模式。由于服务器上没有连接,您基本上必须在客户

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

(例如)

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


有更简单的方法吗?

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

  • 加载用户并获取他的相册列表
  • 查询相册id位于用户相册列表中的照片
  • 当您有多对多关系时,这是MongoDB中的常见模式。由于服务器上没有连接,您基本上必须在客户机上编写自己的连接

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

    根据你所拥有的结构,这基本上是你所能做的。另外,请注意MongoDB
    ObjectId
    不是单调递增的。如果要按ID排序,则必须是您自己的ID


    还请注意,您可以在
    相册ID
    字段的
    照片上创建索引,以加快查询速度。但是,如果您计划使用
    .sort()
    并让服务器为您排序,则该字段必须是同一索引的一部分,否则将引发错误。

    照片不属于用户吗?如果将用户ID也存储在照片集合中,则会容易得多。
    **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 album in all the user's albums:
        get photos belonging to this album
            put it to global list
    sort it