2017-09-27 112 views
0

我有一個像下面這樣的文檔。Mongodb按月查詢

{ 
    "_id" : 1, 
    "name" : "Robin", 
    "membership" : [ 
     { 
      "package" : 12, 
      "time" : "months", 
      "active" : true, 
      "start" : ISODate("2017-07-26T09:21:55.360Z") 
     }, 
     { 
      "package" : 1, 
      "time" : "months", 
      "active" : true, 
      "start" : ISODate("2017-09-26T09:51:46.915Z") 
     } 
    ] 
} 
{ 
    "_id" : 9, 
    "name" : "Linh Tran", 
    "membership" : [ 
     { 
      "package" : 1, 
      "time" : "months", 
      "active" : true, 
      "start" : ISODate("2017-09-26T09:57:37.638Z") 
     } 
    ] 
} 

我想查詢9月份開始的會員資格。我知道Doc有$month (aggregation),但它不包括我的情況。

更新:輸出應包含成員在9月份開始的結果。像7月份的其他月份不顯示。

+1

你能給出你期望的例子輸出結果? –

回答

0

運行,首先使用$redact管道在集級別過濾其成員從9月份開始的文件如下合計操作:

db.test.aggregate([ 
    { 
     "$redact": { 
      "$cond": [ 
       { "$or": [ 
        "$membership", 
        { "$eq": [ { "$month": "$start" }, 9 ] } 
       ] }, 
       "$$DESCEND", 
       "$$PRUNE" 
      ] 
     } 
    } 
]) 

樣本輸出

/* 1 */ 
{ 
    "_id" : 1, 
    "name" : "Robin", 
    "membership" : [ 
     { 
      "package" : 1.0, 
      "time" : "months", 
      "active" : true, 
      "start" : ISODate("2017-09-26T09:51:46.915Z") 
     } 
    ] 
} 

/* 2 */ 
{ 
    "_id" : 9, 
    "name" : "Linh Tran", 
    "membership" : [ 
     { 
      "package" : 1.0, 
      "time" : "months", 
      "active" : true, 
      "start" : ISODate("2017-09-26T09:57:37.638Z") 
     } 
    ] 
}