用$filter错误计数



我的数据库配置看起来像:

{
"_id" : ObjectId("5ece47aa6510a611b47aac5a"),
"boats" : [ 
{
"_id" : ObjectId("5ece47aa6510a611b47aac6e"),
"model" : "Dufour",
"year" : 2019,
"about" : [ 
{
"_id" : ObjectId("5ece47aa6510a611b47aac71"),
"Capacity" : 14,
"characteristics" : [ 
{
"_id" : ObjectId("5ece47aa6510a611b47aac73"),
"fuel" : "petrol",
"fuelCap" : 200
}, 
{
"_id" : ObjectId("5ece47aa6510a611b47aac73"),
"fuel" : "petrol",
"fuelCap" : 120
},
]
}, 
{
"_id" : ObjectId("5ece47aa6510a611b47aac71"),
"Capacity" : 8,
"characteristics" : [ 
{
"_id" : ObjectId("5ece47aa6510a611b47aac73"),
"fuel" : "benzin",
"fuelCap" : 180
}, 
{
"_id" : ObjectId("5ece47aa6510a611b47aac73"),
"fuel" : "petrol",
"fuelCap" : 100
},
]
},
{...},
{...},
]
}

现在我正在尝试计算具有"燃料":"汽油"的船只数量,所以我使用下面的代码:

router.get('/boat', async(req, res)=>{
try{
const fuelData = await Boat.aggregate([
{
$project: {
fuelData: {
$filter: {
input: "$boats",
as: "boats",
cond: {
$filter:{
input:"$$boats.about",
as:"about",
cond:{
$filter:{
input:"$$about.characteristics",
as:"characteristics",
cond:{
$eq:["$$activity1.activity.type", "STILL"]
}
}
}   
}
}
}
}
}
},
{
$project: {
boatsCount: {$size : "$fuelData" } 
}
}
])
res.status(201).send(fuelData)
}catch(e){
res.send(e)
}
})

问题是返回错误的船数。似乎它返回了数据库内的船只数量。如何正确计算有"燃料":"汽油"的船只有什么帮助吗? 我的代码有什么问题吗?

https://mongoplayground.net/p/D0FEhTMJEJ1

希望这是你需要的。 您提供的示例数据缺少 ] & }。

所以我增加了 1 艘额外的船和 2 艘大约。

db.collection.aggregate([
{
$match: {
"boats.about.characteristics.fuel": "petrol"
}
},
{
$unwind: "$boats"
},
{
$unwind: "$boats.about"
},
{
$match: {
"boats.about.characteristics.fuel": "petrol"
}
},
{
$group: {
_id: null,
count: {
$sum: 1
}
}
}
])

最新更新