【问题标题】:Mongoose - get number of matching fieldsMongoose - 获取匹配字段的数量
【发布时间】:2019-08-17 10:28:29
【问题描述】:

我正在使用 Mongoose 在 Node.js 中编写一个 REST API 来访问 MongoDB 后端数据库。我想提供一个 API 端点,它返回与特定变量状态匹配的数组对象的计数。

这是我目前所拥有的,但它给了我一个空洞的回应......

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

有人帮帮我吗?

谢谢!

【问题讨论】:

标签: node.js json mongodb api mongoose


【解决方案1】:

您可以使用 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 数组中具有至少一个元素且variationStatus : status 的文档

  2. $unwind :扩展variations 数组并将其从数组转换为对象。 $unwind 从单个文档创建多个文档,具有单独的数组元素,所有其他字段保持不变。

  3. $match :仅选择具有variations.variationStatus:status的文档

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

  5. $project:这一步是专门计算变量数组的大小,使用$size

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

【讨论】:

    猜你喜欢
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 2021-12-22
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多