【问题标题】:Spring data mongoDB push operation with multiple fields are not working具有多个字段的Spring数据mongoDB推送操作不起作用
【发布时间】: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是什么版本的?

标签: mongodb spring-boot aggregation


【解决方案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 查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 2020-03-27
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多