我正在使用Mongoose在Node.js中编写REST API来访问MongoDB后端数据库。我想提供一个API端点,该端点返回与特定的variationStatus匹配的数组对象的数量的计数。
这是我到目前为止的内容,但这给了我一个空洞的答案...
//Get 'Approved' count
app.get("/v1/approvedcount", async (request, response) => {
var status = 'Approved';
try {
var result = await variationsModel.find({ 'variations.variationStatus': status }).exec().count();
response.send(result);
} catch (error) {
response.status(500).send(error);
}
} )
这是我的模特...
const variationsModel = mongoose.model("variations", {
"variations": [
{
"variationID": String,
"custID": String,
"projID": String,
"variationTitle": String,
"variationDesc": String,
"variationStatus": String,
"variationChargeable": String,
"variationCost": String,
"requireMaterial": String,
"variationRequestor": String,
"variationCreationDate": String,
"variationImages": [
{
"imageId": String
}
],
"variationCategory": String
}
]
});
有人帮我吗?
谢谢!
答案 0 :(得分:0)
您可以使用MongoDB聚合管道来实现相同目的。
尝试一下:
variationsModel
.aggregate([{
$match : {
'variations.variationStatus' : status
}
},{
$unwind : "variations"
},{
$match : {
'variations.variationStatus' : status
}
},{
$group : {
_id : "$_id",
variations : {
$push : '$variations'
}
}
},{
$project : {
count : {$size : $variations}
}
}]);
说明:
$match
:仅使用variations
variationStatus : status
数组中至少具有一个元素的那些文档
$unwind
:扩展variations
数组并将其从数组转换为对象。 $unwind
从单个文档创建多个文档,并使用单独的数组元素,而所有其他字段保持不变。
$match
:仅选择具有variations.variationStatus:status
$group
:将所有文档重新组合成原始形式(与_id
分组),并再次创建variations
数组,但这一次它将仅包含带有variationStatus :status
$project
:此步骤专门用于使用$size
计算变化数组的大小。