当前位置: 首页 > 知识库问答 >
问题:

Mongoose-获取匹配字段的数量

柴英博
2023-03-14

我正在Node.js中编写一个RESTAPI,使用Mongoose访问MongoDB后端数据库。我想提供一个APIendpoint,它返回与特定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个答案

邹学民
2023-03-14

您可以使用MongoDB聚合管道来实现相同的功能。

试试这个:

variationsModel
    .aggregate([{
         $match : {
            'variations.variationStatus' : status
         }
    },{
        $unwind : "variations"
    },{
        $match : {
            'variations.variationStatus' : status
        }
    },{
        $group : {
            _id : "$_id",
            variations : {
                $push : '$variations'
            }
        }
    },{
        $project : {
            count : {$size : $variations}
        }
    }]);

说明:

>

  • $match:仅选择那些在变体数组中至少有一个元素且具有变体状态的文档:状态

    ============================================================================================================================================

    $match:仅选择具有变体的文档。变体状态:状态

    $group:将所有文档重新分组为原始形式(使用\u id进行分组),并再次创建变体数组,但这次它将只包含那些具有变体状态:状态

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

    有关详细信息,请阅读MongoDb$unWind,$project和$size留档。

  •  类似资料:
    • 我用的是Elasticsearch 7.6 我在餐厅索引中有如下文档: 计数表示收到的订单数。 当客户在网站上按菜单名称搜索时,我想给几家餐馆中菜单数量高的餐厅打高分,并将其显示在搜索结果的顶部。 要做到这一点,似乎有必要知道无痛脚本中每个文档中匹配的菜单。 我想知道这是可能的。如果是这样,我该怎么做? 更新感谢大家的回答@jaspreet chahal 我做了这样的索引: 我想做的是在使用多重匹

    • 在elasticsearch中,假设我有如下文档 有一个用例,如果我在搜索栏中键入“Bio”,我应该从elasticsearch中获得匹配的字段值和字段名。 对于本例, 输入:“生物” 预期产出: 我应该使用什么类型的查询?我可以想到使用NGram标记器,然后使用匹配查询。但是,我不确定如何只获得匹配的字段值(而不是整个文档)和相应的字段名作为输出。

    • 问题内容: 为了优化起见,我试图减少我的总字段数。但是在开始之前,我想了解一下我实际上有多少个字段。端点中似乎没有任何信息,而且我不太清楚迁移工具如何进行字段计数计算。 是否可以通过某种端点或其他方法来获取指定索引的总字段数? 问题答案: 为了进一步根据其他答案提供更多信息,您可以获取映射,然后简单地计算关键字在输出中出现的次数,这将给出字段数,因为每个字段都需要一种类型:

    • 问题内容: 这里有点复杂的SQL问题。 我目前有一个与多个字段匹配的SELECT语句,就像这样。 我想修改该语句,以使其使用OR而不是AND,从而选择与任何字段匹配的所有记录。 下一步是使用评分系统对结果进行排名。 所以… 匹配1-如果field2和field 3匹配,则得分为1400 匹配2-如果field1和field 4匹配,则得分将为1010 比赛1将在结果顶部。 对于使用SQL实现此目标

    • 问题内容: 我有一个列表,数组或您熟悉的任何一种语言。例如,names:如果与这些名称之一匹配,我想查询该字段。 一种方法是使用OR过滤器。例如 有什么更好的办法吗?如果它是查询,则比过滤器更好。 问题答案: 哪一个Elasticsearch会像您曾经使用过的那样重写 在大多数情况下,使用布尔型过滤器时,使用过滤器比或更好。原因在Elasticsearch博客中进行了解释:http://www.e

    • 我是cucumber新手。我想测试两个登录场景: 使用用户应该能够成功登录的有效凭据 用户应该无法登录的空用户名和密码 我有上述场景的以下代码: 在java文件中,我有以下代码: 我的问题是,场景2显示了一条警告消息: 这是否意味着对于每个场景,如有效、空和无效凭据,我都需要编写一个单独的java函数?我不能使用相同的java函数: 对于所有场景?如果运行功能文件,则会得到以下输出: 是否有任何方