我在mongoDB中具有属性数据,该数据具有字段{ListPrice,ClosePrice},并且希望拥有那些ListPrice小于所有选定属性的ClosePrice平均值的属性。
首先,我已经计算出ClosePrice的平均值,然后尝试实现$ cond来检查ListPrice是否小于将数据推送到字段中。
我希望获得ListPrice小于或等于ClosePrice的数据。
db.collection('properties').aggregate([
{
$group:{
_id: 1,
avgClosePrice: { $avg: "$ClosePrice" },
data : {
$push : {
$cond: [
{
$lte: ["$ListPrice", "$avgClosePrice"]
},
"$ListPrice",
0
]
}
},
}
},
]
).limit(100).toArray((err, response)=> {
if(err) console.log(err)
else console.log(response)
}
答案 0 :(得分:0)
要在一个阶段中实现这一目标可能很困难,但是您可以将其分解为多个阶段并获得理想的结果。
尝试一下:
db.collection('properties').aggregate([
{
$group:{
_id: 1,
avgClosePrice: { $avg: "$ClosePrice" },
ListPrice : {$first : "$ListPrice"}
}
},{
$project : {
avgClosePrice : "$avgClosePrice",
data : {
$expr : {
$cond : [
{
$lt : ["$ListPrice", "$avgClosePrice"]
},
"$ListPrice",
0
]
}
}
}
},{
$group : {
_id : "$_id",
avgClosePrice : {$first : "$avgClosePrice"},
data : {$push : "$data"}
}
}
]
).limit(100).toArray((err, response)=> {
if(err) console.log(err)
else console.log(response)
}