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")
]
}
잘 모르겠지만 당신이 elemMatch를 찾고 있다고 생각합니다. http://stackoverflow.com/questions/23469463/mongo-db-querying-a-nested-array-of-objects/23469748#23469748 –
우리는 어떻게 "평평한"배열에서 elemMatch를 사용할 수 있습니까? "123", " 234 "]? 왜냐하면 elemMatch는 [{val : "123"}, {val : "234"}와 같은 객체가 필요하기 때문입니다. – patrickkeller
샘플 데이터를 제시하지 않으 셨다면 조금 힘듭니다. 그러나 배열이 키 값에 대해 "익명"인 경우에도 일반적인 전제가 정확합니다. 그렇다면 관련 데이터는 어떻습니까? –