猫鼬-获取匹配字段的数量

时间:2019-03-26 22:51:40

标签: node.js json mongodb api mongoose

我正在使用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
        }
    ]
});

有人帮我吗?

谢谢!

1 个答案:

答案 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}
        }
    }]);

说明:

  1. $match:仅使用variations

  2. 选择variationStatus : status数组中至少具有一个元素的那些文档
  3. $unwind:扩展variations数组并将其从数组转换为对象。 $unwind从单个文档创建多个文档,并使用单独的数组元素,而所有其他字段保持不变。

  4. $match:仅选择具有variations.variationStatus:status

  5. 的那些文档
  6. $group:将所有文档重新组合成原始形式(与_id分组),并再次创建variations数组,但这一次它将仅包含带有variationStatus :status

  7. $project:此步骤专门用于使用$size计算变化数组的大小。

有关详细信息,请阅读MongoDb $unwind$project$size文档。