使用 NativeQuery 的 MongoDB 聚合

Posted

技术标签:

【中文标题】使用 NativeQuery 的 MongoDB 聚合【英文标题】:MongoDB Aggregation using NativeQuery 【发布时间】:2016-01-20 14:24:52 【问题描述】:

我正在尝试使用 NativeQuery 在 mongoDB 中进行简单的聚合。是否可以?我做了很多测试,但我找不到解决方案。 查询是:

 String query = " $match : 
                         dateTimestamp : 
                               $gt : 1452380400000 , $lt :1453222518000
                         ,
                     $group : 
                     _id : hour:
                                 $hour : '$date'
                              ,
                            'myData' :  $push : '$dataUsed'
                      
                    ,
                     $sort :  'dataUsed' : -1";


    Object resultObject = em.createNativeQuery(query,MyClass.class).getSingleResult();

错误是:“无法规范化查询:BadValue unknown top level 运算符:$match"

MongoDB version3.0

hibernate-ogm-mongodb 4.2.0

【问题讨论】:

【参考方案1】:

您可能想尝试“调用” MongoDB 的 aggregate() API:

String nativeQuery = "db.collection.aggregate(["
    + " $match:  dateTimestamp:  $gt: 1452380400000, $lt: 1453222518000   ," // WHERE
    + " $group:  _id:  hour:  $hour : '$date' , myData:  $push: '$dataUsed'   ," // GROUP BY
    + " $sort :  '_id.hour': -1  ]"; // ORDER BY

Query query = em.createNativeQuery(nativeQuery, MyClass.class);

【讨论】:

不适合我:当我尝试做 query.getSingleResult()... 我有一个 JsonParse 异常 ....

以上是关于使用 NativeQuery 的 MongoDB 聚合的主要内容,如果未能解决你的问题,请参考以下文章

如何在spring数据仓库nativeQuery中使用oracle NVL函数

带有 OpenQuery 和参数的 NativeQuery

Doctrine2:使用 NativeQuery 和 ResultSetMapping 进行查询

使用 Doctrine NativeQuery 获取单行结果

使用Doctrine NativeQuery获取单行结果

我可以在 JpaRepository nativeQuery 中使用枚举参数吗?