这是我的数据结构:
{
"_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"
}
}
}
}
])
我可以获取所有文档数据,但是影片数组与每个文档都是独立的。
任何人都知道如何从多个文档生成一个电影数组吗?预先感谢。
答案 0 :(得分:2)
尝试$group
和null
。这样一来,您就可以将所有电影放到一个数组中,而不必依赖每个文档
{ "$group": {
"_id": null,
"movie": {
"$addToSet": {
"cnName": "$movie.cnName",
"photoHref": "$movie.photoHref"
}
}
}
}