如何计算列表列表中的项目

时间:2017-02-06 18:25:15

标签: mongodb mongodb-query

如何在oauth_token_secret列表中找到每个项目的长度:

例如,如果我正在寻找"mol",我希望得到以下结果:

"versionA" : "2.1.2"

我的数据:

{"project" : "A", "scene" : 13455312, mol:[3,2,1]},
{"project" : "B", "scene" : 13455344, mol:[3,3,3]}

2 个答案:

答案 0 :(得分:1)

您可以$matchversion字段和$map,它会迭代mol$size来计算数据字段的长度。

db.collection.aggregate(
    [{
        $match: {
            "versionA": "2.1.2"
        }
    }, {
        $project: {
            _id: 0,
            "project": 1,
            "scene": 1,
            "mol": {
                $map: {
                    input: "$mol",
                    as: "mo",
                    in: {
                        $size: "$$mo.data"
                    }
                }
            }
        }
    }]
)

答案 1 :(得分:0)

还有另一种方法:

首先$map {mol}的每个元素,然后在内部使用$reduce将mol的每个元素减小为数组内部的大小。

db.stack.aggregate([
    {
        $match: { "versionA": "2.1.2" }    
    },
    {
        $project: {
            _id: 0,
            "project": 1,
            "scene": 1,
            mol: {
                $map: {
                  input: "$mol",
                  as: "ob",
                  in: {
                      $reduce: {
                            input: "$$ob.data",
                            initialValue: 0,
                            in: { $add: ["$$value", 1] }  
                      }
                  }
                }
            }
        }
    }
]);