2016-11-14 69 views
1

可以說我有一個這樣的文件:具體日期比較

{ 
    productName: 'soap', 
    expiredDate: ISO_DATE_FORMAT 
} 

在正常的SQL我可以查詢這樣的: SELECT * FROM table_name WHERE Month(expiredDate) = 11

如何在mongoDB或mongooseJS中實現它?

回答

1

你可以使用聚合框架,有一些運營商,您可以使用。考慮它看起來在操縱$project管道內的date operators和隨後$match管道基於與所述$month表達附加字段來過濾文件第一使用情況:

db.collection.aggregate([ 
    { 
     "$project": { 
      "productName": 1, 
      "expiredDate": 1, 
      "expiredMonth": { "$month": "$expiredDate" } 
     } 
    }, 
    { "$match": { "expiredMonth": 11 } } 
]) 

另一個選項是使用單個管道與$redact運營商,其中包含的功能$project如上$match並返回符合使用$$KEEP系統變量指定的條件,其全部文件,並丟棄那些不使用$$PRUNE系統變量相匹配。請記住這個操作者的集合掃描,因此第一管線選項可能是最佳的:

db.collection.aggregate([ 
    { 
     "$redact": { 
      "$cond": [ 
       { 
        "$eq": [ 
         { "$month": "$expiredDate" }, 
         11 
        ] 
       }, 
       "$$KEEP", 
       "$$PRUNE" 
      ] 
     } 
    } 
]) 
+1

似乎工作。我將首先學習彙總框架,然後將其應用於我的用例。因爲實際上我的用例與這個例子有點不同。 感謝您的解釋。 – Kim

0

可以使用聚合框架

​​