以下是我的moviedb集合:
"_id" : ObjectId("59b9501600fcb397d6acd5bb"),
"theatreid" : 2,
"name" : "carnival cinemas",
"location" : "kanjulmarg",
"address" : "sec 2,kanjul, Mumbai, Maharashtra 400703",
"shows" : [
{
"mname" : "bareily ki barfi",
"timings" : [
10,
13,
14,
16,
22
]
},
{
"mname" : "Toilet:ek prem katha",
"timings" : [
8,
9,
14,
16,
20,
23
]
}
]
"_id" : ObjectId("59b9506500fcb397d6acd5bc"),
"theatreid" : 3,
"name" : "pheonix pvr",
"location" : "kurla",
"address" : "sec 26,kurla, Mumbai, Maharashtra 400701",
"shows" : [
{
"mname" : "shubh mangal savdhan",
"timings" : [
9,
11,
15,
18,
20
]
},
{
"mname" : "Toilet:ek prem katha",
"timings" : [
8,
9,
14,
16,
20,
23
]
}
]
我想要显示电影时间(假设它是24小时格式)大于14(下午2点)的节目。 我使用了以下查询:
db.moviedb.find( {"shows.timings": {$gt:14}}, {shows: {$elemMatch: {timings:{$gt: 14}}}}).pretty()
它提供以下输出:
实际
"_id" : ObjectId("59b94fc900fcb397d6acd5ba"),
"shows" : [
{
"mname" : "bareily ki barfi",
"timings" : [
10,
13,
15,
17,
21
]
}
]
"_id" : ObjectId("59b9501600fcb397d6acd5bb"),
"shows" : [
{
"mname" : "bareily ki barfi",
"timings" : [
10,
13,
14,
16,
22
]
}
]
但是,正如观察到的那样,它也会显示那些不满足条件的元素(如10,13)。我只想要显示那些满足结果的元素。 我希望以下列方式输出。
预期
"_id" : ObjectId("59b94fc900fcb397d6acd5ba"),
"shows" : [
{
"mname" : "bareily ki barfi",
"timings" : [
15,
17,
21
]
}
]
"_id" : ObjectId("59b9501600fcb397d6acd5bb"),
"shows" : [
{
"mname" : "bareily ki barfi",
"timings" : [
16,
22
]
}
]
这是我在使用$ filter后得到的输出,但是如果我手动输入数组它会很好。
db.moviedb.aggregate([ { $project: { " shows.timings":
{ $filter: { input: "$shows.timings",
as: "item",
cond: { $gte: [ "$$item", 22 ] } } } } } ])
"_id" : ObjectId("59b94fc900fcb397d6acd5ba"), " shows" : { "timings" : [ [
10, 13, 15, 17, 21 ], [ 8, 11, 14, 17, 20, 22 ] ] } }
"_id" : ObjectId("59b9501600fcb397d6acd5bb"), " shows" : { "timings" : [ [
10, 13, 14, 16, 22 ], [ 8, 9, 14, 16, 20, 23 ] ] } }
"_id" : ObjectId("59b9506500fcb397d6acd5bc"), " shows" : { "timings" : [ [
9, 11, 15, 18, 20 ], [ 8, 9, 14, 16, 20, 23 ] ] } }
需要做什么? 请帮忙。谢谢:)