具有多个字段的Spring数据mongoDB推送操作不起作用

Posted

技术标签:

【中文标题】具有多个字段的Spring数据mongoDB推送操作不起作用【英文标题】:Spring data mongoDB push operation with multiple fields are not working 【发布时间】:2019-08-08 22:44:48 【问题描述】:

我在 MongoDB 中有一组数据对象-

[
     "status" : "passed", "version" : "124" , "value" : 6 ,
     "status" : "passed", "version" : "123" , "value" : 10 ,
     "status" : "failed", "version" : "123" , "value" : 16 
]

我想以类似的格式获取它 -

[
     
    version: 124,
    "series" :[ 
         
            "name" : "passed", 
            "value" : 6 
        
      ]
    ,
    
    version: 123,
    "series" : [
          
             "name" : "passed", 
             "value" : 10 
         ,
          
             "name" : "failed", 
             "value" : 16 
         
      ]
    
]

我应该如何编写查询? 我写了像

这样的查询

我写了这样的查询:

Aggregation.group("version").push(new BasicDBObject("name","$status").append("value", "$value")).as("series");

使用上面的聚合查询,我得到这样的结果:

[
     
    version: 124,
    "series" :[ 
         
          "name" : null, 
          "value" : 6 
        
      ]
    ,
    
    version: 123,
    "series" : [
          
           "name" : null, 
           "value" : 10
         ,
          
           "name" : null, 
           "value" : 16 
         
      ]
    
]

对象中好像没有取status的值。我该如何解决这个问题?

【问题讨论】:

我也在做同样的事情,对我来说效果很好。你用的spring-data-mongodb是什么版本的? 【参考方案1】:

我的查询是这样的:

db.results.aggregate([
     
       "$group": 
             "_id": 
                  "status": "$status",
                  "version": "$version",
              ,
             "count": 
                  "$sum": 1
              
            
        , 
            $group: 
                _id: "$_id.version",
                "series": 
                    $push: 
                        "status": "$_id.status",
                        "value": "$count"
                    
                
            
        
    ]);

所以我必须将聚合查询添加为:

Aggregation.group("version").push(new BasicDBObject("_id", "$_id.status").append("value", "$value")).as("series");

【讨论】:

【参考方案2】:

我尝试了 mongo 聚合。在外壳中尝试。 我不熟悉spring。

db.getCollection('Test1').aggregate([

$group:
    _id:"$version",
    version:$first:"$version",
    series:
        $push:
            name:"$status",
            value:"$value"
            
        
    
,
$project:_id:0
])

【讨论】:

感谢您的回复,但我需要 spring boot mongoDB 查询。

以上是关于具有多个字段的Spring数据mongoDB推送操作不起作用的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB - 具有多个字段并获得最新结果

使用Spring-Integration获取具有某些字段(投影)的mongodb文档(仅限注释)

具有多个字段的类似 MongoDB 的语句

Spring Data (数据)MongoDB

具有在运行时创建的多个数据源的 Spring Boot 和 Spring Data 应用程序

MongoDB:考虑到多个字段,我如何按距离排序?