只显示满足mongodb条件的嵌套数组中的元素?

时间:2017-09-13 18:13:56

标签: javascript arrays node.js mongodb

以下是我的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 ] ] } }

需要做什么? 请帮忙。谢谢:)

0 个答案:

没有答案