2014-05-13 5 views
0

의 가치 우리는 문제는 "match_global"문이다 루비MongoDB를 집계 : 배열

def self.course_overview(course_member=nil) 
    course_member = CourseMember.last if course_member == nil 

    group_global = {"$group" => 
    {"_id" => { "course_id" => "$course_id", 
       "title" => "$title", 
       "place" => "$place", 
       "description" => "$description", 
       "choosen_id" => "$choosen_id", 
       "year" => {"$year" => "$created_at"}, 
       "course_member_ids" => "$course_member_ids"}} 
    } 

    match_global = {"$match" => {"_id.course_member_ids" => {"$in" => "#{course_member.id}"} }} 


    test = CoursePlan.collection.aggregate([group_global, match_global]) 

    return test 
end 

에 Testsnippet을 다음했다. course_member_ids 배열에있는 course_member ID가 나타나는 모든 문서를 일치시키고 싶습니다.

위의 명령문은 "... 반드시 배열이어야합니다"라는 오류와 함께 실패합니다. 이것은 나에게 의미가 있지만 웹에 대한 다른 의견에 따르면 이것은 가능해야합니다.

어떤 조언이 필요합니까? course_member ID 배열에있는 course_member ID가있는 위치에서 문서를 반환하는 방법은 무엇입니까?

샘플 CoursePlan 개체 : course_member_ids 이후

{ 
    "_id" : ObjectId("5371e70651a53ed5ad000055"), 
    "course_id" : ObjectId("5371e2e051a53ed5ad000039"), 
    "course_member_ids" : [ 
     ObjectId("5371e2a751a53ed5ad00002d"), 
     ObjectId("5371e2b251a53ed5ad000030"), 
     ObjectId("5371e2bb51a53ed5ad000033") 
    ], 
    "created_at" : ISODate("2014-05-13T09:33:58.042Z"), 
    "current_user" : "51b473bf6986aee9c0000002", 
    "description" : "Schulung 1/Elektro", 
    "fill_out" : ISODate("2014-04-30T22:00:00.000Z"), 
    "place" : "TEST", 
    "title" : "Schulung 1", 
    "updated_at" : ISODate("2014-05-13T09:33:58.811Z"), 
    "user_ids" : [ 
     ObjectId("51b473bf6986aee9c0000002"), 
     ObjectId("521d7f606986ae4826000002"), 
     ObjectId("521d8b3f6986aed678000007") 
    ] 
} 
+0

잘 모르겠지만 당신이 elemMatch를 찾고 있다고 생각합니다. http://stackoverflow.com/questions/23469463/mongo-db-querying-a-nested-array-of-objects/23469748#23469748 –

+0

우리는 어떻게 "평평한"배열에서 elemMatch를 사용할 수 있습니까? "123", " 234 "]? 왜냐하면 elemMatch는 [{val : "123"}, {val : "234"}와 같은 객체가 필요하기 때문입니다. – patrickkeller

+0

샘플 데이터를 제시하지 않으 셨다면 조금 힘듭니다. 그러나 배열이 키 값에 대해 "익명"인 경우에도 일반적인 전제가 정확합니다. 그렇다면 관련 데이터는 어떻습니까? –

답변

1

는 어떤지를 테스트해야 물론 회원의 배열입니다. 쉘 구문에서 : 당신은 당신이 찾고있는 특정 단일 값이 문서를 선택하고자 할 때이 쿼리는 find 유사으로

{$match:{"_id.course_member_ids":<valueYouWantToTest>}} 

당신은 $in 필요하지 않습니다.