2016-11-14 68 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

可以使用聚合框架

​​