[MONGODB] MongoDB를 단일 쿼리로 여러 카운트
MONGODBMongoDB를 단일 쿼리로 여러 카운트
나는 몽고 DB에 새로운 오전이 쿼리에 어떤 도움을 주셔서 감사합니다. 난 내 쿼리에하지만 행운에 관련된 아무것도 찾을 수 있는지 내 머리를 찢어 일 지난 몇 여기 게시물을 통해 선별되었다.
나는 아래 구조가 유사한 문서의 컬렉션이 있습니다 :
_id: xyz
Movieid: 123
MovieName: Titanic
ReleaseDate: 2000-01-01
_id: uvw
Movieid: 456
MovieName: Titanic II
ReleaseDate: 2018-01-01
_id: pqr
Movieid: 789
MovieName: Titanic III
ReleaseDate:
나는 아래와 같이 3 별도의 열에 출시 날짜없이 totalmovies에 대한 수, 출시 날짜와 영화, 영화 등의 출력을 달성하고 싶습니다 :
Total | Released | UnReleased
3 | 2 | 1
나는 계산을 실행하는 개별 쿼리를 작성 할 수 있었다, 그러나 나는 성공적으로 단일 쿼리로 모든 것을 통합 할 수 없습니다입니다. 최종 목표는 출력으로이 수를 생산하는 하나의보기를 만드는 것입니다. 내가 가진 나는이 같은 $와 같은 연산자를 사용하여 시도했지만 원하는대로 작업에 쿼리를 얻을 수없는 것 .... 이것까지입니다 :
db.getCollection("Movies").aggregate(
$and: [
{
"$match" :
{"ReleaseDate":{$exists:true}}
}
,
{
$count:"Total"
},
{
"$match" :
{"ReleaseDate":{$exists:true,$nin:[""]}}
}
,
{
$count:"Released"
},
{
"$match" :
{"ReleaseDate":{$exists:true,$in:[""]}}
}
,
{
$count:"Unreleased"
}
]
);
해결법
-
==============================
1.당신은 $면 집계 아래에 시도 할 수 있습니다
당신은 $면 집계 아래에 시도 할 수 있습니다
$ 카운트 집계는 항상 단 하나의 일치 ($ 일치) 조건에 대해 당신에게 수를 줄 것이다. 여러 섹션으로하고 $면 입력 문서의 동일한 세트에서 하나의 단계 내에서 프로세스 여러 집계 파이프 라인에 의해 제공하는 기능의 것을 더 분할에 각각의 수를 필요 그래서.
db.collection.aggregate([ { "$facet": { "Total": [ { "$match" : { "ReleaseDate": { "$exists": true }}}, { "$count": "Total" }, ], "Released": [ { "$match" : {"ReleaseDate": { "$exists": true, "$nin": [""] }}}, { "$count": "Released" } ], "Unreleased": [ { "$match" : {"ReleaseDate": { "$exists": true, "$in": [""] }}}, { "$count": "Unreleased" } ] }}, { "$project": { "Total": { "$arrayElemAt": ["$Total.Total", 0] }, "Released": { "$arrayElemAt": ["$Released.Released", 0] }, "Unreleased": { "$arrayElemAt": ["$Unreleased.Unreleased", 0] } }} ])
산출
[{ "Total": 3, "Released": 2, "Unreleased": 1 }]
-
==============================
2.당신은 집계 아래로 사용할 수 있습니다.
당신은 집계 아래로 사용할 수 있습니다.
$있다>는 null - 필드가 집계 식에 존재하는지 여부를 확인합니다.
출력이 0과 1 $ 합 $ COND 발매일 필터에 기초.
$ 추가 출력 전체에 모두 출시 및 출시되지 않은 수를 추가 할 수 있습니다.
db.Movies.aggregate([ {"$group":{ "_id":null, "Unreleased":{"$sum":{"$cond":[{"$and":[{"$gt":["$ReleaseDate",null]},{"$ne":["$ReleaseDate",""]}]},0,1]}}, "Released":{"$sum":{"$cond":[{"$and":[{"$gt":["$ReleaseDate",null]},{"$ne":["$ReleaseDate",""]}]},1,0]}} }}, {"$addFields":{"Total":{"$add":["$Unreleased","$Released"]}}} ])
-
==============================
3.
db.Movies.aggregate( // Pipeline [ // Stage 1 { $group: { _id: null, Total: { $sum: 1 }, docs: { $push: '$$ROOT' } } }, // Stage 2 { $project: { _id: 0, Total: 1, Released: { $filter: { input: "$docs", as: "doc", cond: { $ne: ["$$doc.ReleaseDate", ""] } } }, Unreleased: { $filter: { input: "$docs", as: "doc", cond: { $eq: ["$$doc.ReleaseDate", ""] } } }, } }, // Stage 3 { $project: { Total: 1, Released: { $size: '$Released' }, UnReleased: { $size: '$Unreleased' } } }, ] );
from https://stackoverflow.com/questions/52088666/multiple-counts-with-single-query-in-mongodb by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB를 집계 명령 / 파이프 라인에 행 번호의 어떤 종류를 추가 (0) | 2019.12.10 |
---|---|
[MONGODB] 계산 조건에 몽고 정렬 (0) | 2019.12.10 |
[MONGODB] 나는 MongoDB에 대한 쿼리에 정규식 변수를 사용하는 방법 (0) | 2019.12.10 |
[MONGODB] 두 점 사이의 MongoDB를 인쇄 거리 (0) | 2019.12.10 |
[MONGODB] 어떻게 유성 외부 MongoDB의 인스턴스에 연결하는? (0) | 2019.12.10 |