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

时间:2019-04-10 06:16:28

标签: mongodb mongoose

这是我的数据结构:

{
    "_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 个答案:

答案 0 :(得分:2)

尝试$groupnull。这样一来,您就可以将所有电影放到一个数组中,而不必依赖每个文档

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