2014-10-20 88 views
1

我有以下mysql语句,但我想用它与java的spring mongodb驱动程序。如何转换它?看过聚合但不知道如何。在MongoDB中计数语句

SELECT SUM(CASE WHEN CreatedTime BETWEEN ('7:00:00' AND '7:14:59') THEN 1 ELSE 0) as firstCount, 
     SUM(CASE WHEN CreatedTime BETWEEN ('7:15:00' AND '7:29:59') THEN 1 ELSE 0) as secondCount, 
FROM MyTable 
Where username='Jim' 

蒙戈文件:使用弹性数据将其转换成Java的

{ _id: ObjectId("5asd3ea3402984ca53"), username: "Jim", comment: "hi", CreatedTime: ISODate("2014-10-15T16:39:26.870Z") } 

UPDATE

当调用getTemplate().executeCommand(match);我得到这个:

{ "serverUsed" : "xxxxxxx" , "ok" : 0.0 , "errmsg" : "no such cmd: $match" , "bad cmd" : { 
"$match" : { "username" : "Jim"} , 
"$group" : { 
    "firstCount" : { 
     "$sum" : { 
      "$cond" : { 
       "if" : { 
        "$and" : [ [ { "$gte" : { "$CreatedTime" : { "$date" : "2014-09-20T16:02:10.924Z"}}} , 1 , 0] , 
          [ { "$lte" : { "$CreatedTime" : { "$date": "2014-10-20T15:48:19.744Z"}}} , 1 , 0]]} , 
       "then" : { "$ifTrue" : 1} , 
       "else" : { "$else" : 0} 
      } 
     } 
    } 
}}} 

代码,我用来获取JSON的是here(它相当长).Query看起来与@Wizard建议的一样。

$ match有什么麻烦?我在Stackoverflow的某个地方读到了旧版本的mongodb不支持$匹配,但我有2014年8月发布,所以不能这样。

+0

只是一个蒙戈外壳查询也会清楚的事情了一下。 – user3960875 2014-10-20 11:37:48

回答

2

像这样:

db.MyTable.aggregate([{ 
    $match : { 
     username : 'Jim' 
    } 
}, { 
    $group : { 
     _id : 0, 
     firstCount : { 
      $sum : { 
       $cond : { 
        "if" : { 
         $and : [{ 
          $gte : [ "$CreateTime", '7:00:00' ] 
         }, { 
          $lte : [ "$CreateTime", '7:14:59' ] 
         }] 
        }, 
        "then" : 1, 
        "else" : 0 
       } 
      } 
     }, 
     secondCount : { 
      $sum : { 
       $cond : { 
        "if" : { 
         $and : [{ 
          $gte : [ "$CreateTime", '7:15:00' ] 
         }, { 
          $lte : [ "$CreateTime", '7:29:59' ] 
         }] 
        }, 
        "then" : 1, 
        "else" : 0 
       } 
      } 
     }, 
    } 
}]); 
+0

我认为这是比我更好的方式来完成这项工作;)。很好的答案(投了) – Disposer 2014-10-20 12:22:41

+0

@Disposer,谢谢。 :) – Wizard 2014-10-20 12:27:12

+0

感谢它帮助我走了:) – user3960875 2014-10-20 16:10:25