나는 비슷한 질문을 보았지만 나 자신과 같은 초보자에게는 복잡했다. 또한 응답을 구문 분석을 제공하는 아무도.프로젝트 및 슬라이스를 사용한 집계, mongodb
내 데이터베이스 :
name :"Kim"
points: [
{ category:"Purchase",
points: -50},
{ category: "Wage",
points : 275},
{ category: "Purchase",
points: -40}
]
name :"Meghan"
points: [
{ category:"Contest",
points: 130},
{ category: "Purchase",
points : -25},
{ category: "Games",
points : 50}
]
]
는 그래서 몽고 쉘에서 나는 "구매"를 동일하지만 마지막 날에 돌아가 모든 points.category을 찾을 얻기 위해 노력하고있어. 필자는 aggregate, $ project 및 $ slice를 사용하여이 작업을 시도했습니다. 내 문제는 $ slice가 $ project 또는 쉼표로 구분 된 외부에 있는지 여부를 알 수있는 구문을 잘 이해하지 못한다는 것입니다. 필자가 $ project를 단독으로 사용하거나 $ slice를 사용할 때 구문을 이해하지만 이러한 모든 것을 함께 사용하여 마술처럼 사용하는 방법에 대한 단서가 없습니다. 누군가 내 문제를 해결하고 이러한 모든 것을 적절하게 결합하는 방법을 설명 할 수 있다면 영원히 빚을지게 될 것입니다. 나는 문서를 읽었지만, 모든 것을 다 사용하는 방법을 보여주지 못했습니다.
마지막으로 구입 한 제품을 찾으려면 이름이 김 (Kim) 인 학생을 검색하고 싶습니다. 내가 원하는 결과는 [{points : -40}]
누락 된 부분은' "구매를 위해 ['$ filter'] (https://docs.mongodb.com/manual/reference/operator/aggregation/filter/) 배열의 내용이 필요하다 "''** 먼저 ** 전에 $ 슬라이스를 적용하거나 ['$ arrayElemAt'] (https://docs.mongodb.com/manual/reference/operator/aggregation/arrayElemAt/)을 사용하여 * * 마지막 ** 요소. 그래서'$ filter'는 그 원소들을 가진 배열을 반환합니다. 그 명령문을'$ slice'와'-1' 인덱스로 감싸는 것은 "filtered"배열의 "last"를 반환합니다. –
링크 된 문서 외에'$ filter' 사용법과 같은 [MongoDB 컬렉션의 객체 배열에서 쿼리 된 요소 만 검색] (https://stackoverflow.com/q/3985214/2313887)을 참조하십시오. –
좋아, 이걸 생각해 냈어 : db.students.aggregate ([{$ project : {points : {$ filter : {input : "$ points", as : "pts", cond : {$ eq : [ "$ $ pts.category ","Purchase "]}}}}}). pretty()'문제는 모든 학생의 구매를 반환한다는 것입니다. 어떻게하면 그냥 kims를 돌려 주며, 어디에서 마지막 구매 만 할 수 있도록 슬라이스를 놓을 수 있습니까? –