我有一個這樣的資料集,bus 是集合的名稱。
{ BusID:"1001", delayMinutes :"15.0", City:"LA" },
{ BusID:"1004", delayMinutes :"3.0", City:"PA" },
{ BusID:"1001", delayMinutes :"20.0", City:"LA" },
{ BusID:"1002", delayMinutes :"6.0", City:"CA" },
{ BusID:"1002", delayMinutes :"25.0", City:"CA" },
{ BusID:"1004", delayMinutes :"55.0", City:"PA" },
{ BusID:"1003", delayMinutes :"55.0", City:"KA" },
{ BusID:"1003", delayMinutes :"5.0", City:"KA" },
我嘗試像這種格式進行分組,但它對我不起作用
{"_id":["1003","KA"], "A":"2","B":"1",C:"1"}
其中A:公交車總數,B:延遲分鐘>“10.0”的公交車遲到,C:A / B和顯示的比例必須是下降的。我嘗試過的代碼:
db.bus.aggregate([
{
$project: {
A: 1,
B: {
$cond: [{ $gt: ["$delayMinutes", "10.0"] }, 1, 0]
}
}
},
{
$group:{
_id:{BusID:"$BusID", City:"$City"},
A: {$sum:1},
B: {$sum: "$B"}
}
}
])
uj5u.com熱心網友回復:
操場
db.collection.aggregate([
{
$addFields: { //Projection limits the fields to be passed to the next stage
A: 1,
B: {
$cond: [
{
$gt: [
{
$toDouble: "$delayMinutes" //You need conversion as you have string
},
10.0
]
},
1,
0
]
}
}
},
{
$group: {
_id: {
BusID: "$BusID",
City: "$City"
},
A: {
$sum: 1
},
B: {
$sum: "$B"
}
}
},
{
$match: {
$expr: {
"$gt": [ //You need this to skip divideByZero error
"$B",
0
]
}
}
},
{
"$addFields": {
"C": {
"$divide": [
"$A",
"$B"
]
}
}
}
])
此外,您可以使用$sort
來獲得所需的訂單。
要將 ID 轉換為陣列,
{
"$project": {
A: 1,
B: 1,
C: 1,
_id: [
"$_id.BusID",
"$_id.City"
]
}
}
樣本
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/482017.html