代码之家  ›  专栏  ›  技术社区  ›  Morton

如何用一个数组聚合多个文档?

  •  1
  • Morton  · 技术社区  · 6 年前

    以下是我的数据结构:

    {
        "_id" : ObjectId("5becc8e2e9427e48d0edab83"),
        "theater" : "TodayTainan",
        "geometry" : {
            "type" : "Point",
            "coordinates" : [ 
                120.196866, 
                22.99322
            ]
        },
        "movie" : [ 
            {
                "movieDate" : "上映日期:2018-07-25",
                "videoId" : [ 
                    "17Y_lXjB3VI", 
                    "ovbEe1-qUZ0"
                ],
                "imdbScore" : "",
                "cnName" : "不可能的任務:全面瓦解",
                "photoHref" : "https://movies.yahoo.com.tw/x/r/w420/i/o/production/movies/June2018/8LBd1GYiRhtjZMCcdOSl-1019x1500.JPG",
                "rottenScore" : "",
                "releasedTime" : [ 
                    ISODate("2018-11-15T12:40:00.000Z"), 
                    ISODate("2018-11-15T17:20:00.000Z"), 
                    ISODate("2018-11-15T22:00:00.000Z")
                ],
                "enName" : "Mission: Impossible Fall Out",
                "goodMinePoint" : 0.75
            }, 
            {
                "movieDate" : "上映日期:2018-08-10",
                "videoId" : [ 
                    "j-FAn2jGI08", 
                    "6aWIWGBWlPk"
                ],
                "imdbScore" : "5.9",
                "cnName" : "巨齒鯊",
                "photoHref" : "https://movies.yahoo.com.tw/x/r/w420/i/o/production/movies/July2018/xO7qzzEwPCaipjCWkkxg-2714x3878.jpg",
                "rottenScore" : "45%",
                "releasedTime" : [ 
                    ISODate("2018-11-15T15:20:00.000Z"), 
                    ISODate("2018-11-15T20:00:00.000Z")
                ],
                "enName" : "The Meg",
                "goodMinePoint" : 0.3
            }
        ],
        "phone" : "06-2205151"
    }
    

    我用 addToSet 要使用以下代码这样的文档删除重复数据,请执行以下操作:

    db.getCollection('TaipeiEast').aggregate([
                { "$match": {
                      "theater": "TodayTainan"
                    }
                },
                { "$unwind": '$movie' },
                { "$group": {
                    "_id": "$_id",
                    "movie": {
                      "$addToSet": {
                        "cnName": "$movie.cnName",
                        "photoHref": "$movie.photoHref"
                      }
                    }
                  } 
                }
              ])
    

    现在我在一个集合中有很多文档,我想把它们查询成一个没有重复电影的电影数组。

    我试着移除 match 这样地:

    db.getCollection('TaipeiEast').aggregate([
                    { "$unwind": '$movie' },
                    { "$group": {
                        "_id": "$_id",
                        "movie": {
                          "$addToSet": {
                            "cnName": "$movie.cnName",
                            "photoHref": "$movie.photoHref"
                          }
                        }
                      } 
                    }
                  ])
    

    我可以得到所有的文档数据,但是电影数组与每个文档是独立的。

    有人知道如何从多个文档生成一个电影数组吗?提前谢谢。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Ashwanth Madhav    6 年前

    尝试 $group null . 因此,您可以在一个数组中获取所有电影,而不依赖于每个文档

                { "$group": {
                    "_id": null,
                    "movie": {
                      "$addToSet": {
                        "cnName": "$movie.cnName",
                        "photoHref": "$movie.photoHref"
                      }
                    }
                  } 
                }