在我的示例中,电影院有两部电影,我希望在查询{ $gte: ISODate("2018-03-27 19:00:00.000Z")}
后,我可以通过Pacific Rim Uprising
,21:00
和{{1}获得电影21:40
与Tomb Raider
这是我的文件:
19:30
我在寻找教程,他们所教的只是一个带日期的文档。查询日期并明显获取其他信息。
在我的情况下,我很困惑。
任何人都可以教我如何重组我的数据库或分享任何教程链接?任何帮助,将不胜感激。提前谢谢。
答案 0 :(得分:1)
您可以按照以下方式重新构建您的收藏:每个影院都有一系列电影,每部电影都有一个名称,照片和发布时间。
{
"_id" : ObjectId("5abb086677d96df7015c56c6"),
"theater" : "Madou",
"movies" : [{
"name": "Pacific Rim Uprising",
"photo": "https://movies.yahoo.com.tw/x/r/w420/i/o/production/movies/March2018/GD9otOLc6d3eprWHC1Ve-2757x4000.jpg",
"releasedTimes" : [
ISODate("2018-03-27T12:20:00.000Z"),
ISODate("2018-03-27T14:30:00.000Z"),
ISODate("2018-03-27T15:10:00.000Z"),
ISODate("2018-03-27T16:40:00.000Z"),
ISODate("2018-03-27T18:50:00.000Z"),
ISODate("2018-03-27T21:00:00.000Z"),
ISODate("2018-03-27T21:40:00.000Z")
]
}, {
"name": "Tomb Raider",
"photo": "https://movies.yahoo.com.tw/x/r/w420/i/o/production/movies/March2018/MueV83b8cYC28yRbknIT-3254x4650.jpg",
"releasedTimes" : [
ISODate("2018-03-27T13:00:00.000Z"),
ISODate("2018-03-27T17:20:00.000Z"),
ISODate("2018-03-27T19:30:00.000Z")
]
}]
}
在仅发布时间超过指定日期的电影方面,您需要使用aggregation - 特别是$filter和$map的组合来过滤子数组。你可以阅读这个answer来大致了解为什么用这种方式编写(尽管可能有更简单的方法)。
db.theatres.aggregate([{
$project: {
theater: true,
movies: {
$filter: {
input: {
$map: {
input: "$movies",
as: "movie",
in: {
name: "$$movie.name",
photo: "$$movie.photo",
releasedTimes: {
$filter: {
input: "$$movie.releasedTimes",
as: "time",
cond: { $gte: [ "$$time", ISODate("2018-03-27 19:00:00.000Z") ] }
}
}
}
}
},
as: "movie",
cond: "$$movie"
}
}
}
}])
在Robo3T上测试后,结果将是
{
"_id" : ObjectId("5abb086677d96df7015c56c6"),
"theater" : "Madou",
"movies" : [
{
"name" : "Pacific Rim Uprising",
"photo" : "https://movies.yahoo.com.tw/x/r/w420/i/o/production/movies/March2018/GD9otOLc6d3eprWHC1Ve-2757x4000.jpg",
"releasedTimes" : [
ISODate("2018-03-27T21:00:00.000Z"),
ISODate("2018-03-27T21:40:00.000Z")
]
},
{
"name" : "Tomb Raider",
"photo" : "https://movies.yahoo.com.tw/x/r/w420/i/o/production/movies/March2018/MueV83b8cYC28yRbknIT-3254x4650.jpg",
"releasedTimes" : [
ISODate("2018-03-27T19:30:00.000Z")
]
}
]
}
如果需要,您可能需要添加additional stages来过滤掉没有发布时间影片的影院。