2017-12-26 5 views
0

는 MongoDB를 내 사용자 컬렉션에서 다음과 같은 문서가 있다고 가정 :MongoDB의 컬렉션에 (모든 다른 사람을 포함해야 함) 공통 속성에 추가하여 중첩 된 배열 요소에서 (기준에 따라) 특정 값을 검색

{ 
_id: 1, 
zipcode: "63109", 
students: [ 
       { name: "john", school: 102, age: 10 }, 
       { name: "jess", school: 102, age: 11 }, 
       { name: "jeff", school: 108, age: 15 } 
      ] 
} 
{ 
_id: 2, 
zipcode: "63110", 
students: [ 
       { name: "ajax", school: 100, age: 7 }, 
       { name: "achilles", school: 100, age: 8 }, 
      ] 
} 
{ 
_id: 3, 
zipcode: "63109", 
students: [ 
       { name: "ajax", school: 100, age: 7 }, 
       { name: "achilles", school: 100, age: 8 }, 
      ] 
} 
{ 
_id: 4, 
zipcode: "63109", 
students: [ 
       { name: "barney", school: 102, age: 7 }, 
       { name: "ruth", school: 102, age: 16 }, 
      ] 
} 

마 질의 :

db.user.find({ "students.name": "barney" }, { students: { $elemMatch: { name: "barney" } } }) 

반환 다음

{ 
    "_id" : "2", 
    "students" : [ 
     { 
      "name" : "ajax", 
      "school" : "100", 
      "age": "7" 
     } 
    ] 
}, 
{ 
    "_id" : "3", 
    "students" : [ 
     { 
      "name" : "ajax", 
      "school" : "100", 
      "age": "7" 
     } 
    ] 
} 

하지만 t 필요 o 이름 ("ajax")을 기반으로 중첩 배열 요소 ("학생")를 필터링하고 각 문서에있는 다른 모든 속성도 포함합니다. 예를 들어

, 나는 "우편 번호"같은 일반적인 속성을 포함하는 내 결과를 기대하고 너무 아래와 같이
{ 
    "_id" : "2", 
    "zipcode": "63110", 
    "students" : [ 
     { 
      "name" : "ajax", 
      "school" : "100", 
      "age": "7" 
     } 
    ] 
}, 
{ 
    "zipcode": "63109", 
    "_id" : "3", 
    "students" : [ 
     { 
      "name" : "ajax", 
      "school" : "100", 
      "age": "7" 
     } 
    ] 
} 

나는이 어떻게 할 수

?

답변

0

당신은 당신이 당신의 기준에 일치 다음을 $unwind하고 필요 일반 문서로 중첩 된 요소를 치료하려면 :

db.users.aggregate([ 
    { $unwind: "$students"}, 
    { $match: { "students.name": "ajax" }} 
]) 

예를 들어 _id와 문서에 긴장 : 1 세 별도의 문서를 생성합니다 학생 배열의 단일 요소.

+0

효과가있었습니다. 감사 :) – saikumarb23

관련 문제