[MONGODB] 몽고 통합 프레임 워크의 특정한 배열 요소로 그룹화
MONGODB몽고 통합 프레임 워크의 특정한 배열 요소로 그룹화
이는 어레이의 특정 요소에 의해 그룹으로 통합 프레임 워크를 사용할 수있다?
이와 같은 문서와 그 :
{
name: 'Russell',
favourite_foods: [
{ name: 'Pizza', type: 'Four Cheeses' },
{ name: 'Burger', type: 'Veggie'}
],
height: 6
}
나는 (예. 인덱스 0 음식)는 최고 좋아하는 음식의 가장 높은 사람의 높이와 함께 최고 좋아하는 음식의 별개의 목록을 얻을 수 있을까?
이런 식으로 뭔가 (는 배열 인덱스 액세스 점 표기법 등의 작업을하지 않지만 집계 프레임 워크에서 작동하지 않는 것) :
db.people.aggregate([
{ $group : { _id: "$favourite_foods.0.name", max_height: { $max : "$height" } } }
])
해결법
-
==============================
1.당신이 배열의 첫째되는 각 사람의 좋아하는 음식에 의존하는 것 같다. 그렇다면, 당신이 활용할 수있는 통합 프레임 워크 연산자가있다.
당신이 배열의 첫째되는 각 사람의 좋아하는 음식에 의존하는 것 같다. 그렇다면, 당신이 활용할 수있는 통합 프레임 워크 연산자가있다.
다음은 사용할 수있는 파이프 라인은 다음과 같습니다
db.people.aggregate( [ { "$unwind" : "$favourite_foods" }, { "$group" : { "_id" : { "name" : "$name", "height" : "$height" }, "faveFood" : { "$first" : "$favourite_foods" } } }, { "$group" : { "_id" : "$faveFood.name", "height" : { "$max" : "$_id.height" } } } ])
이 샘플 데이터 세트의 경우 :
> db.people.find().pretty() { "_id" : ObjectId("508894efd4197aa2b9490741"), "name" : "Russell", "favourite_foods" : [ { "name" : "Pizza", "type" : "Four Cheeses" }, { "name" : "Burger", "type" : "Veggie" } ], "height" : 6 } { "_id" : ObjectId("5088950bd4197aa2b9490742"), "name" : "Lucy", "favourite_foods" : [ { "name" : "Pasta", "type" : "Four Cheeses" }, { "name" : "Burger", "type" : "Veggie" } ], "height" : 5.5 } { "_id" : ObjectId("5088951dd4197aa2b9490743"), "name" : "Landy", "favourite_foods" : [ { "name" : "Pizza", "type" : "Four Cheeses" }, { "name" : "Pizza", "type" : "Veggie" } ], "height" : 5 } { "_id" : ObjectId("50889541d4197aa2b9490744"), "name" : "Augie", "favourite_foods" : [ { "name" : "Sushi", "type" : "Four Cheeses" }, { "name" : "Pizza", "type" : "Veggie" } ], "height" : 6.2 }
이러한 결과를 얻을 수 :
{ "result" : [ { "_id" : "Pasta", "height" : 5.5 }, { "_id" : "Pizza", "height" : 6 }, { "_id" : "Sushi", "height" : 6.2 } ], "ok" : 1 }
-
==============================
2.같군요는 응집 배열에서 특정 요소를 추출하는 현재 불가능하다 : https://jira.mongodb.org/browse/SERVER-4589
같군요는 응집 배열에서 특정 요소를 추출하는 현재 불가능하다 : https://jira.mongodb.org/browse/SERVER-4589
-
==============================
3.난 당신이 $ 프로젝트를 사용할 수있다 생각하고 $ 언 와인드 운영자는 (나에게 이것은 당신이 달성하기 위해 노력하고하지 무엇을 알고하자)
난 당신이 $ 프로젝트를 사용할 수있다 생각하고 $ 언 와인드 운영자는 (나에게 이것은 당신이 달성하기 위해 노력하고하지 무엇을 알고하자)
> db.people.aggregate( {$unwind: "$favourite_foods"}, {$project: {food : "$favourite_foods", height: 1}}, {$group : { _id: "$food", max_height: { $max : "$height" } } }) { "result" : [ { "_id" : { "name" : "Burger", "type" : "Veggie" }, "max_height" : 6 }, { "_id" : { "name" : "Pizza", "type" : "Four Cheeses" }, "max_height" : 6 } ], "ok" : 1 }
http://docs.mongodb.org/manual/applications/aggregation/
-
==============================
4.그냥 "$ 바람을"사용 후 결과에 대한 자세한 정보를 추가 :
그냥 "$ 바람을"사용 후 결과에 대한 자세한 정보를 추가 :
문서 :
> db.people.find().pretty() { "_id" : ObjectId("508894efd4197aa2b9490741"), "name" : "Russell", "favourite_foods" : [ { "name" : "Pizza", "type" : "Four Cheeses" }, { "name" : "Burger", "type" : "Veggie" } ], "height" : 6 }, ...
AGGREGATION :
db.people.aggregate([{ $unwind: "$favourite_foods" }]);
결과 :
{ "_id" : ObjectId("508894efd4197aa2b9490741"), "name" : "Russell", "favourite_foods" :{ "name" : "Pizza", "type" : "Four Cheeses" }, "height" : 6 }, { "_id" : ObjectId("508894efd4197aa2b9490741"), "name" : "Russell", "favourite_foods" : { "name" : "Burger", "type" : "Veggie" }, "height" : 6 }
게다가: 하나 개의 콜렉션 기록에 두 개 이상의 배열 필드가있는 경우, 우리는 배열 필드를 지정하는 "$ 프로젝트"단계를 사용할 수 있습니다.
db.people.aggregate([ { $project:{ "favourite_foods": 1 } }, { $unwind: "$favourite_foods" } ]);
from https://stackoverflow.com/questions/13055462/group-by-specific-element-of-array-with-mongo-aggregation-framework by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 복잡한 (비동기) virtuals에를 몽구스 (0) | 2019.12.19 |
---|---|
[MONGODB] 모음을 지정하지 않고 MongoDB의에서 문서를 가져 오기 (0) | 2019.12.19 |
[MONGODB] 어떻게 MongoDB의 하나 제대로 증가 많은 날짜는 무엇입니까? (0) | 2019.12.19 |
[MONGODB] 몽구스 -에 의해 : 11000 E11000 중복 키 에러 인덱스 발생? (0) | 2019.12.19 |
[MONGODB] findOneAndUpdate에서 반환하는 필드를 선택 몽구스 (0) | 2019.12.19 |