2017-09-13 31 views
1

以下是我收集moviedb:僅顯示滿足mongodb條件的嵌套數組中的元素?

"_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 
        ] 
      } 
    ] 

這是我甚至使用$過濾後得到的輸出,但它工作得很好,如果我給手動輸入數組。

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

看起來你可以用'$ filter'做你想要的東西 - https://docs.mongodb.com/manual/reference/operator/aggregation/filter/ –

+0

的[查找雙可能的複製嵌套數組MongoDB](https://stackoverflow.com/questions/29071748/find-in-double-nested-array-mongodb) – Veeram

+0

@realseanp,我用$過濾器,仍顯示不滿足條件的值。我只是想顯示滿足條件的元素只在shows.timings數組 – radhika

回答

0

嘗試下面的聚合查詢。

db.moviedb.aggregate(
    [ 
     { 
     "$addFields": { 
      "shows": { 
      "$map": { 
       "input": "$shows", 
       "as": "resultm", 
       "in": { 
       "name": "$$resultm.name", 
       "timings": { 
        "$filter": { 
        "input": "$$resultm.timings", 
        "as": "resultf", 
        "cond": { 
         "$gte": [ 
         "$$resultf", 
         14 
         ] 
        } 
        } 
       } 
       } 
      } 
      } 
     } 
     } 
    ] 
) 
+0

是的,它的工作!非常感謝 :) – radhika

相關問題