Mongodb는 배열 필드의 크기 합계입니다.
그래서 저는 다음과 같은 간단한 문서들을 많이 가지고 있습니다.
{
"foos": [
ObjectId("5105862f2b5e30877c685c58"),
ObjectId("5105862f2b5e30877c685c57"),
ObjectId("5105862f2b5e30877c685c56"),
],
"typ": "Organisation",
}
그리고 관련된 전체적인 크기를 알고 싶습니다.foos
"조직" 유형의 문서로 이동합니다.
그래서 저는 이 집계 쿼리가 있습니다.
db.profil.aggregate(
[
{
$match:{
"typ":"Organisation"
}
},
{
$project: {
fooos: { $size: "$foos" }
}
}
]
)
각 문서에 대한 모든 foo의 개수를 반환합니다.
예:
{ "_id" : ObjectId("50e577602b5e05e74b38a6c8"), "foooos" : 1 }
{ "_id" : ObjectId("51922170975a09f363e3eef5"), "foooos" : 3 }
{ "_id" : ObjectId("51922170975a09f363e3eef8"), "foooos" : 2 }
{ "_id" : ObjectId("5175441d975ae346a3a8dff2"), "foooos" : 0 }
{ "_id" : ObjectId("5192216f975a09f363e3eee9"), "foooos" : 2 }
{ "_id" : ObjectId("5192216f975a09f363e3eeeb"), "foooos" : 3 }
{ "_id" : ObjectId("5192216f975a09f363e3eee4"), "foooos" : 2 }
{ "_id" : ObjectId("5192216f975a09f363e3eee6"), "foooos" : 2 }
{ "_id" : ObjectId("5192216f975a09f363e3eedb"), "foooos" : 2 }
{ "_id" : ObjectId("51922174975a09f363e3ef4a"), "foooos" : 1 }
{ "_id" : ObjectId("5192216f975a09f363e3eee1"), "foooos" : 1 }
{ "_id" : ObjectId("5192216e975a09f363e3eed7"), "foooos" : 2 }
{ "_id" : ObjectId("5192216f975a09f363e3eeee"), "foooos" : 3 }
모든 문서의 foo에 대한 합계 카운트를 반환하는 쿼리가 있습니까?
나는 $sum을 가지고 놀았지만 내 쿼리와 결합하는 방법을 모릅니다. 구문 오류만 발생합니다. 이것이 가능한지 알면 멋질 것입니다.
다음과 같이 단계 후에 연산자 파이프라인 단계를 포함합니다.
db.profil.aggregate([
{ "$match":{ "typ": "Organisation" } },
{ "$project": {
"fooos": { "$size": "$foos" }
} },
{ "$group": {
"_id": null,
"count": {
"$sum": "$fooos"
}
} }
])
그러면 이전 단계의 모든 입력 문서가 그룹화되고 다음 단계에 누적기 식을 적용합니다.fooos
그룹 내에서 합계를 가져오는 필드(마지막 예제 사용):
파이프라인을 다음과 같이 우회할 수도 있습니다.
db.profil.aggregate([
{ "$match": { "typ": "Organisation" } },
{ "$group": {
"_id": null,
"count": {
"$sum": { "$size": "$foos" }
}
} }
])
산출량
/* 0 */
{
"result" : [
{
"_id" : null,
"count" : 24
}
],
"ok" : 1
}
이것이 오래된 질문인 것은 알지만, 당신이 원한다면 프로젝트를 완전히 우회할 수 있습니다. 그래서 이것은 어떻습니까?
db.profil.aggregate([
{
"$match":{ "typ": "Organisation" }
},
{
"$group":
{
"_id": null,
"count":
{
"$sum": { "$size": "$foos" }
}
}
}])
출력은 그대로 유지되며 (약간) 더 빠른 것 같습니다.
언급URL : https://stackoverflow.com/questions/30236495/mongodb-sum-the-size-of-array-fields
'programing' 카테고리의 다른 글
T-SQL을 사용하여 날짜/시간 가져오기 (0) | 2023.06.29 |
---|---|
NSDictionary에 부울 값을 추가하려면 어떻게 해야 합니까? (0) | 2023.06.24 |
TinyMCE의 사용자 지정 형식 div가 이전 div와 병합 (0) | 2023.06.24 |
Java 8 날짜 시간 유형이 Spring Boot과 함께 객체로 직렬화됨 (0) | 2023.06.24 |
wp.data.subscribe을 올바르게 사용합니다. (0) | 2023.06.24 |