복붙노트

[MONGODB] 어레이 내 요소 MongoDB에 의해 기

MONGODB

어레이 내 요소 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"
]

나는 그들이 지난 7 일 이내에에서 태그 된 기사의 수에 따라 모든 개별 예술가 (class_artist)의 목록을 얻으려면 (실패) 노력했습니다.

나는 멀리로 왔 :

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});

그러나 불행하게도, 그것은 (작가의 목록입니다) 각각의 배열 값에 기반을 계산하지만, 배열 조성으로하지 않습니다.

나는 $ 언 와인드 기능을 사용하여 시도하지만 그것이 작동되도록 할 수 없었다.

해결법

  1. ==============================

    1.당신은 어떤 프레임 워크를 사용하고 있습니까? 이 MongoDB의 쉘하지 않고 외모는 맵리 듀스 주위에 몇 가지 이상한 래퍼를 좋아한다. 이 경우에 $의 언 와인드에서 사용할 수없는 것입니다, 당신은 통합 프레임 워크에서 사용자를 위해 필요합니다. 다음은 몽고 쉘에서 원하는 내용은 다음과 같습니다

    당신은 어떤 프레임 워크를 사용하고 있습니까? 이 MongoDB의 쉘하지 않고 외모는 맵리 듀스 주위에 몇 가지 이상한 래퍼를 좋아한다. 이 경우에 $의 언 와인드에서 사용할 수없는 것입니다, 당신은 통합 프레임 워크에서 사용자를 위해 필요합니다. 다음은 몽고 쉘에서 원하는 내용은 다음과 같습니다

    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 } }
    ])
    

    그래서 효율적으로 :

    그리고 통합의 좋은 점은 당신이 점차에 무슨 일이 일어나고 있는지 확인하는 단계를 구축 할 수있다.

    흔들어하고 자신의 드라이버 구현 또는 ODM 프레임 워크에 빵을 필요에 따라.

  2. from https://stackoverflow.com/questions/21509045/mongodb-group-by-array-inner-elements by cc-by-sa and MIT license