Javascript MongoDB从数组内的值中选择最小/最大值
所以我在执行一个查询时遇到了问题,该查询只返回两个值,一个数组字段中的字段的最小值和最大值Javascript MongoDB从数组内的值中选择最小/最大值,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,所以我在执行一个查询时遇到了问题,该查询只返回两个值,一个数组字段中的字段的最小值和最大值 client.files.uploads是我想要获取最小/最大值的字段 结果将是“0,10”,例如,我不想获得更多字段,只需查看每个client.files.uploads字段,并获得整个client集合的最小/最大上载量,但只返回最低和最高值,而不是每个客户端的一行 这是我的问题,但没有得到我想要的 db.client.aggregate([ {$unwind: "$files"}, {
client.files.uploads
是我想要获取最小/最大值的字段
结果将是“0,10
”,例如,我不想获得更多字段,只需查看每个client.files.uploads
字段,并获得整个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
})
这个查询只返回一行,其中包含整个集合的最低值和最高值,这正是我想要的
这是我的文档的一个示例数据
[
{
"name": "John",
"files": [
{
"uploads": 9685,
"downloads": 83,
},
{
"uploads": 1,
"downloads": 833
},
{
"uploads": 676,
"downloads": 823
}
]
},
{
"name": "Peter",
"files": [
{
"uploads": 32,
"downloads": 99
},
{
"uploads": 34,
"downloads": 4
}
]
},
{
"name": "Mery",
"files": [
{
"uploads": 3,
"downloads": 244
},
{
"uploads": 15,
"downloads": 543
},
{
"uploads": 1345,
"downloads": 22
},
{
"uploads": 6743,
"downloads": 87543
}
]
}
]
你的预测是错误的。您正在使用as值。将您的投影更改为:
{
$project:{
_id: 0,
data_min: 1,
data_max: 1
}
}
检查此聚合查询
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
}
})
你的答案是正确的,但我改变了我的问题,因为它似乎是错误的,我不仅想得到两个字段(这是你的答案,是100%正确的),我的意思是我只想返回一行,整个集合的最低和最高值,这是我用两个组完成的,但是也许有更好的选择(请参阅我的更新)您的聚合很好,但是在第二个
$group
中,使用\u id:null
而不是\u id:“1”
好的,谢谢,我已经更改了它。我想可能是因为这两组人的原因,我的查询不好(即使有效),也许还有其他方法可以实现。。谢谢抱歉我不在,完全忘了stackoverflow!这是行不通的。刚刚测试过。OP查询还有什么问题?