[MONGODB] $ 언 와인드는 하늘의 배열
MONGODB$ 언 와인드는 하늘의 배열
나는 각 문서는 다음과 같은 구조를 가지고 사용자의 컬렉션이 있습니다 :
{
"_id": "<id>",
"login": "xxx",
"solved": [
{
"problem": "<problemID>",
"points": 10
},
...
]
}
해결이 필드는 비어 있거나 임의의 여러 하위 문서를 포함 할 수있다. 내 목표는 아직 문제를 해결하지 않은 사용자는 0의 총 점수는 단일 쿼리로이 작업을 수행하는 것이이 가능 할당 될 총 점수 (점수의 합)과 함께 사용자의 목록을 얻을 수 있습니다 (이상적으로 사용 통합 프레임 워크)?
나는 통합 프레임 워크에서 쿼리 다음 사용하려고 시도했다 :
{ "$group": {
"_id": "$_id",
"login": { "$first": "$login" },
"solved": { "$addToSet": { "points": 0 } }
} }
{ "$unwind": "$solved" }
{ "$group": {
"_id": "$_id",
"login": { "$first": "$login" },
"solved": { "$sum": "$solved.points" }
} }
그러나 나는 다음과 같은 오류가 점점 오전 :
exception: The top-level _id field is the only field currently supported for exclusion
사전에 감사합니다
해결법
-
==============================
1.MongoDB를 3.2 버전 및 최신으로, $ 언 와인드 운영자는 지금 특히 preserveNullAndEmptyArrays 옵션이 문제를 해결하는 몇 가지 옵션이 있습니다.
MongoDB를 3.2 버전 및 최신으로, $ 언 와인드 운영자는 지금 특히 preserveNullAndEmptyArrays 옵션이 문제를 해결하는 몇 가지 옵션이 있습니다.
이 옵션을 true로 설정하고 경로가 null 누락, 하늘의 배열 인 경우, 언 와인드 출력에게 문서를 $됩니다. false의 경우, $ 언 와인드 경로가 누락, null의 경우 출력하지 문서를 수행, 또는 빈 배열입니다. 귀하의 경우에, true로 설정 :
db.collection.aggregate([ { "$unwind": { "path": "$solved", "preserveNullAndEmptyArrays": true } }, { "$group": { "_id": "$_id", "login": { "$first": "$login" }, "solved": { "$sum": "$solved.points" } } } ])
-
==============================
2.여기에서, 용액 - 그것은 필드 역시 존재하지 않고 "해결"있다고 가정 널 동일하거나 문제 해결 및 점수의 배열을 갖는다. 이 사건은이 손잡이는 하늘의 배열 인 "해결"입니다하지 않습니다 - 그건 당신이 추가 할 수있는 간단한 추가 조정이 될 것입니다 있지만.
여기에서, 용액 - 그것은 필드 역시 존재하지 않고 "해결"있다고 가정 널 동일하거나 문제 해결 및 점수의 배열을 갖는다. 이 사건은이 손잡이는 하늘의 배열 인 "해결"입니다하지 않습니다 - 그건 당신이 추가 할 수있는 간단한 추가 조정이 될 것입니다 있지만.
project = {$project : { "s" : { "$ifNull" : [ "$solved", [ { "points" : 0 } ] ] }, "login" : 1 } }; unwind={$unwind:"$s"}; group= { "$group" : { "_id" : "$_id", "login" : { "$first" : "$login" }, "score" : { "$sum" : "$s.points" } } }
db.students.aggregate ([프로젝트 가질 그룹]);
from https://stackoverflow.com/questions/13895006/unwind-empty-array by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] mongodb.conf bind_ip = 127.0.0.1이 작동하지 않지만 0.0.0.0 작품 (0) | 2019.12.07 |
---|---|
[MONGODB] 어떻게 유성 응용 프로그램 사이 MongoDB의 컬렉션을 공유 할 수 있습니까? (0) | 2019.12.06 |
[MONGODB] 어떻게 블루 버드를 사용하여 MongoDB를 기본 자바 스크립트 드라이버를 promisify 수 있습니까? (0) | 2019.12.06 |
[MONGODB] 항목이있는 경우 어떻게 시험하여 MongoDB를 조회하는? (0) | 2019.12.06 |
[MONGODB] MongoDB를 사용 몽구스의 대량 upsert (0) | 2019.12.06 |