所以我在执行查询时遇到问题,只返回一个数组字段内的字段的两个值MIN和MAX ...
client.files.uploads
是我想要获得MIN / MAX的字段。
结果只是“0,10
”,例如,我不想获取更多字段,只需查看每个client.files.uploads
字段并获取整个MIN {MAX上传{{1} } collection有,但只返回最低值和最高值而不是每个客户端的行。
这是我的疑问,但没有得到我想要的东西......
client
更新:
我已经设法做了我想做的事,但问题仍然存在,因为我不是我的方式是实现它的最好方法......
db.client.aggregate([
{$unwind: "$files"},
{
$group: {
_id : "$_id",
data_min: {$min: "$files.uploads"},
data_max: {$max: "$files.uploads"}
}
},
{
$project:{
data_min: "$min",
data_max: "$max",
}
}
],{allowDiskUse:true})
这个查询只返回一行,整个集合的值最低和最高,这就是我想要的。
这是我的文档的示例数据
db.clients.aggregate([
{$unwind: "$files"},
{
$group: {
_id: "$_id",
data_min: {$min: "$files.uploads"},
data_max: {$max: "$files.uploads"}
}
},
{
$group: {
_id: "1",
min: {$min: "$data_min"},
max: {$max: "$data_max"}
}
},
{
$project: {
_id: 0,
min: 1,
max: 1
}
}
],
{
allowDiskUse: true
})
答案 0 :(得分:4)
您的预测是错误的。您使用accumulator operator作为值。将您的预测更改为:
{
$project:{
_id: 0,
data_min: 1,
data_max: 1
}
}
答案 1 :(得分:0)
检查此聚合查询
db.clients.aggregate({"$unwind": "$files"},
{"$project":{"name":"$name","files":"$files"}},
{"$group":{"_id":"$_id","max":{"$max":"$files"},
"min":{"$min":"$files"}}
}).pretty()
或使用$project
,如下所示
db.clients.aggregate({"$unwind": "$files"},
{"$project":{"name":"$name","files":"$files"}},
{"$group":{"_id":"$_id","max":{"$max":"$files"},
"min":{"$min":"$files"}}},
{"$project":{"max_upload":"$max.uploads",
"max_download":"$max.downloads",
"min_upload":"$min.uploads",
"min_downloads":"$min.downloads","_id":0
}
})