programing

MongoDB: 배열의 항목 수 카운트

newsource 2023. 5. 5. 09:44

MongoDB: 배열의 항목 수 카운트

컬렉션의 모든 문서에 이름이 지정된 배열이 있는 컬렉션이 있습니다.foo포함된 문서 집합을 포함합니다.현재 MongoDB 셸에 포함된 인스턴스 수를 계산하는 사소한 방법이 있습니까?foo다음과 같은 것:

db.mycollection.foos.count()또는db.mycollection.foos.size()?

배열의 각 문서는 고유해야 합니다.foo_id그리고 컬렉션에 있는 임의의 문서에 대한 배열 내부에 요소의 양이 올바른지 확인하기 위해 빠른 계산을 수행하려고 합니다.

MongoDB 2.6에서 Aggregation Framework에는 다음과 같은 새로운 어레이 연산자가 있습니다.

> db.mycollection.insert({'foo':[1,2,3,4]})
> db.mycollection.insert({'foo':[5,6,7]})

> db.mycollection.aggregate([{$project: { count: { $size:"$foo" }}}])
{ "_id" : ObjectId("5314b5c360477752b449eedf"), "count" : 4 }
{ "_id" : ObjectId("5314b5c860477752b449eee0"), "count" : 3 }

최신 버전의 mongo(2.2 이상)에 있는 경우 집계 프레임워크를 사용할 수 있습니다.

db.mycollection.aggregate([
  {$unwind: '$foo'},
  {$group: {_id: '$_id', 'sum': { $sum: 1}}},
  {$group: {_id: null, total_sum: {'$sum': '$sum'}}}
])

그것이 당신에게 총계를 줄 것입니다.foo당신이 수집한 s.

마지막 생략group레코드당 결과를 집계합니다.

투영 및 그룹 사용

db.mycollection.aggregate(
    [
        {
            $project: {
                _id:0,
                foo_count:{$size:"$foo"},
            }
        }, 
        {
            $group: {
                foo_total:{$sum:"$foo_count"},
            }
        }
    ]
)

여러 자식 어레이 수도 이 방법으로 계산할 수 있습니다.

db.mycollection.aggregate(
    [
        {
            $project: {
                _id:0,
                foo1_count:{$size:"$foo1"},
                foo2_count:{$size:"$foo2"},
            }
        }, 
        {
            $group: {
                foo1_total:{$sum:"$foo1_count"},
                foo2_total:{$sum:"$foo2_count"},
            }
        }
    ]
)

언급URL : https://stackoverflow.com/questions/21387969/mongodb-count-the-number-of-items-in-an-array