首页 > 解决方案 > 文档字段总和 mongodb

问题描述

我需要使用以下逻辑查找某些指定字段的总和: Find document where sum of (score_one.1+ score_one.2 + score_one.3 + score_one.4 + score_one.5) <= 6

文档结构如下所示:

{
    _id: ObjectId("5ce12e56937edb2b008631ec"),
    date: "2011-8-3",
    league: "American League",
    team_names: "Texas at Detroit",
    team_one: "TEX",
    score_one: {
        1: 0,
        2: 0,
        3: 0,
        4: 2,
        5: 1,
        6: 0,
        7: 0,
        8: 0,
        9: 1,
        T: "TEXT",
        R: 4,
        ML: -115,
        O/U: "",
        H: 10,
        E: 1
    },
    team_two: "DET",
    score_two: {
        ...
    }
}

如何在 MongoDB 中执行此查询?

标签: node.jsmongodbaggregate-functions

解决方案


如果您正在对一组非常特定的字段进行操作,则可以$sum在这些特定字段上使用运算符。该$addFields阶段根据某个表达式的结果向管道中的所有文档添加任意数量的新字段。在这种情况下,我们对指定的字段进行求和,前缀$为表示现有文档字段,并将结果存储在新field_total字段中。$match然后,我们对修改后的文档执行 a以仅通过使用运算符(小于或等于)获取field_total具有最大值为 a的文档。最终的管道看起来像这样:6$lte

db.collection.aggregate([
    {$addFields: {
        field_total: {$sum: [
            "$score_one.1",
            "$score_one.2",
            "$score_one.3",
            "$score_one.4",
            "$score_one.5"
        ]}
    }},
    {$match: {
        field_total: {$lte: 6}
    }}
]);

推荐阅读