具有多个字段的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推送操作不起作用的主要内容,如果未能解决你的问题,请参考以下文章
使用Spring-Integration获取具有某些字段(投影)的mongodb文档(仅限注释)