Как найти размер массива в массиве? - PullRequest
2 голосов
/ 06 июня 2019

У меня есть массив вроде:

{
"students": [
    [
        "5c8783f0927b1849b923a47b",
        "5c889c139af6b305e19cd17e",
        "5c89f1dc4dc6695c138cb2a4",
        "5cb0624945111f1c5fdf2527",
        "5caed95afd229a5c460e745b",
        "5cbeb926fac7143e261adaab"
    ],
    [
        "5c8783f0927b1849b923a47b",
        "5c889c139af6b305e19cd17e",
        "5c89f1dc4dc6695c138cb2a4"
    ],
    [
        "5c8783f0927b1849b923a47b",
        "5c89f1dc4dc6695c138cb2a4",
        "5cadc0452a00532a4c903c38"
    ],
    [
        "5c8783f0927b1849b923a47b"
    ]
          ]
}

Я хочу найти размер каждого массива в массиве студентов.Например:

"count": [6, 3, 3, 1]

Я пробовал $ map с $ size

 aggregatePipe.push({
       $group: {
                    _id: { subjectId: "$subjectId" },
                    studentIds: { $push: "$students" },
                    count: { $push: { $map: { input: "$students", as: "student", in: { $size: "$student" } } } }
                }
            });

Но я получаю массив нулевых значений.

Ответы [ 2 ]

3 голосов
/ 06 июня 2019

Вы можете использовать ниже агрегации

db.collection.aggregate([
  { "$project": {
    "students": {
      "$map": {
        "input": "$students",
        "in": { "$size": "$$this" }
      }
    }
  }}
])

Выход

[
  {
    "_id": ObjectId("5a934e000102030405000000"),
    "students": [ 6, 3, 3, 1 ]
  }
]
0 голосов
/ 06 июня 2019
db.collection.aggregate(

    // Pipeline
    [
        // Stage 1
        {
            $unwind: {
                path: "$students",

            }
        },

        // Stage 2
        {
            $project: {
                count: {
                    $size: '$students'
                }
            }
        },

        // Stage 3
        {
            $group: {
                _id: null,
                count: {
                    $push: '$count'
                }
            }
        },

        // Stage 4
        {
            $project: {
                _id: 0
            }
        },

    ]



);
...