반응형
어레이별 MongoDB 그룹 내부 요소
저는 기사 목록을 가지고 있고, 각각의 기사에는 언급된 다양한 개인을 나열하는 배열 속성이 있습니다.
_id: {
$oid: "52b632a9e4f2ba13c82ccd23"
},
providerName: "The Guardian",
url: "http://feeds.theguardian.com/c/34708/f/663860/s/3516cebc/sc/38/l/0L0Stheguardian0N0Cmusic0C20A130Cdec0C220Cwaterboys0Efishermans0Eblues0Etour0Ehammersmith/story01.htm",
subject: "The Waterboys – review",
class_artist: [
"paul mccartney"
]
저는 모든 개별 아티스트의 목록을 얻기 위해 (성공적이지 못한) 노력해왔습니다.class_artist
), 지난 7일 동안 태그가 지정된 기사 수를 기준으로 합니다.
여기까지 왔습니다.
var date = new Date();
date.setDate(date.getDate() - 7);
db.articles.group({
key: { class_artist: 1 },
cond: { class_date: { $gt: date } },
reduce: function ( curr, result ) { result.cnt++; },
initial: { cnt : 0 }
}).sort({cnt: -1});
그러나 안타깝게도 개별 배열 값을 기준으로 계산하지 않고 배열 구성(즉, 아티스트 목록)으로 계산합니다.
사용해 보았습니다.$unwind
기능하지만 작동하지 않습니다.
어떤 프레임워크를 사용하고 있습니까?이것은 MongoDB 쉘이 아니며 MapReduce 주변의 이상한 포장지처럼 보입니다.이 경우 $unwind를 사용할 수 없으므로 집계 프레임워크의 사용자에게 $unwind가 필요합니다.몽고 껍질에서 원하는 것은 다음과 같습니다.
db.articles.aggregate([
{$match: { class_date: { $gte: date } } },
{$project: { _id: 0, class_artist: 1 } },
{$unwind: "$class_artist" },
{$group: { _id: "$class_artist", tags: { $sum: 1 } }},
{$project: { _id: 0,class_artist: "$_id", tags: 1 } },
{$sort: { tags: -1 } }
])
효율적으로:
- 지난 7일 동안 이미 변수를 설정했으므로 날짜별로 필터링
- 필요한 필드만 프로젝트 {하나만 필요합니다!}
- 모든 문서에 있는 모든 배열 요소에 대한 레코드를 가질 수 있도록 배열을 해제합니다.
- 확장된 문서에서 아티스트 그룹화
- _id로 엉망진창인 그룹으로 사용할 수 있는 문서 형식으로 프로젝트 수행
- 결과를 역순으로 정렬하여 먼저 태그가 지정된 상단을 확인합니다.
집합체의 좋은 점은 단계적으로 그 단계들을 구축해서 무슨 일이 일어나고 있는지 볼 수 있다는 것입니다.
필요에 따라 자신만의 드라이버 구현 또는 ODM 프레임워크를 흔들어 굽습니다.
언급URL : https://stackoverflow.com/questions/21509045/mongodb-group-by-array-inner-elements
반응형
'sourcecode' 카테고리의 다른 글
TypeLoadException에 ' 구현 없음'이라고 표시되지만 구현됩니다. (0) | 2023.05.03 |
---|---|
Psql 모든 표 나열 (0) | 2023.05.03 |
데이터를 "라우터 아웃렛" 하위 구성 요소로 전달 (0) | 2023.05.03 |
Git/GitHub 기록에서 폴더 및 폴더 내용 제거 (0) | 2023.05.03 |
UI 보기의 왼쪽 상단 및 오른쪽 상단 모서리에만 모서리 반지름을 설정하는 방법은 무엇입니까? (0) | 2023.05.03 |