How to count items in list of lists

て烟熏妆下的殇ゞ 提交于 2019-12-31 05:22:49

问题


How i can find length of each item in a "mol"list:

For example if I am looking for "versionA" : "2.1.2" I expect ot get following result:

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

My data:

{
        "project" : "A",
        "scene" : 13455312,
        "versionA" : "2.1.2",
        "versionB" : "2.1.9",
        "mol" : [ {"data" : [ { "tran" : 'A' }, { "tran" : 'B' }, { "tran" : 'C' }]}, {"data" : [ { "tran" : 'A' }, { "tran" : 'B' }]}, {"data" : [ { "tran" : 'A' }]}]
    },

    {
        "project" : "B",
        "scene" : 13455344,
        "versionA" : "2.1.2",
        "versionB" : "2.1.9",
        "mol" : [ {"data" : [ { "tran" : 'A' }, { "tran" : 'B' }, { "tran" : 'C' }]}, {"data" : [ { "tran" : 'A' }, { "tran" : 'B' }, { "tran" : 'C' }]}, {"data" : [ { "tran" : 'A' }, { "tran" : 'B' }, { "tran" : 'C' }]}]
    },
    {
        "project" : "C",
        "scene" : 135555,
        "versionA" : "2.1.3",
        "versionB" : "2.1.9",
        "mol" : [ {"data" : [ { "tran" : 'A' }]}, {"data" : [ { "tran" : 'A' }]}, {"data" : [ { "tran" : 'A' }]}]
    }

回答1:


You can $match to the version field and $map which iterates the mol and $size to calculate the the length of data field.

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"
                    }
                }
            }
        }
    }]
)


来源:https://stackoverflow.com/questions/42074686/how-to-count-items-in-list-of-lists

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!