2015-01-25 12 views
-7

죄송하지만 질의와 혼동 스러울 것입니다. 친절하게 도움이됩니다. 우리가 그리고 내가 밖으로 넣어 친절 하 MongoDB가 필요합니다. Query

아래

{ 
    "_id":100, 
    "name":"Demarcus Audette", 
    "scores":[ 
     { 
     "score":39.01726616178844, 
     "type":"homework" 
     }, 
     "score":89.01726616178844, 
     "type":"homework" 
     } 
    ] 
} 
같아야 의미에서 숙제를 포함 행만 반환해야하는 쿼리를 작성하는

{ 
    "_id":100, 
    "name":"Demarcus Audette", 
    "scores":[ 
     { 
     "score":47.42608580155614, 
     "type":"exam" 
     }, 
     { 
     "score":44.83416623719906, 
     "type":"quiz" 
     }, 
     { 
     "score":39.01726616178844, 
     "type":"homework" 
     }, 
     "score":89.01726616178844, 
     "type":"homework" 
     } 
    ] 
} 

를 포함하는 하나의 문서를 원하는 한 가정 제안해라. 미리 감사드립니다.

+1

숙제가있는 행은 있습니까? 그건 그렇고, 오늘 숙제가 있니? – joao

+2

@joao MongoDB의 누군가가 이러한 질문을 모니터링하고 SO 기업에게 "take down"요청을 발급 한 것 이외에는 다른 해결책이 전혀 없습니다. 이것은 공개 강좌가 실행될 때마다 대량으로 일어날 것입니다. 오프 북 중재자들은 질문 자체를 제거하지 않을 것임을 분명히했습니다. 이것들이 많이 내려지면 삭제 될 수 있습니다. 그러나 기존의 가까운 이유는 다른 중재자에게 너무 열려있어 다시 열 수 없습니다. –

+0

네, 숙제의 일부입니다.하지만 ans를 얻기 위해 그것을 걸러 내려고하고 있지만, 위 질문에 대한 질문을 작성하는 방법을 배우지 못하고 있습니다. – user2513120

답변

0

$elemMatch 연산자를 사용하십시오.

db.collection.find({ "scores": { $elemMatch: { "type": "homework" } } }); 

편집

당신이 요구하는 것은 불가능합니다. 위의 질의가 필요할 것이고 프로그래밍중인 언어로 나머지를 걸러 낼 것입니다. $unwind$match을 사용하는 집계 함수를 사용할 수도 있습니다.

db.collection.aggregate(
    {$unwind: "$messages"}, 
    {$match: {"scores.type": "homework"}} 
); 

$unwind은 배열을 평평하고 $match 일치하는 문서를 반환하여 실제로 쿼리입니다. $ unwind가 배열의 각 요소에 대해 다른 문서를 만들 것임을에 유의하십시오. 즉, 귀하의 예에 따라 '숙제'를 걸러 낼 때 두 가지 결과를 얻게됩니다.

+0

안녕하세요, 위와 같이 쿼리를 시도했지만 예상대로 작동하지 않는 것처럼 보입니다. 문서에있는 모든 레코드가 반환됩니다. 친절하게도 다른 대안을 제안합니다. – user2513120

+0

@ user2513120 나는 내 대답을 편집했지만 달성하고자하는 결과는 MongoDB만으로는 불가능합니다. –

+0

전문가의 조언에 감사드립니다. 그러나 나는 그 뒤에 기술적 인 이유가 무엇인지 궁금합니다. 조금이라도 설명해 주면 대단하고 충실 할 것입니다. – user2513120

0

나는

db.test.find({},{scores:{$elemMatch:{type:'homework'}}}); 

결과 하나 개의 쿼리를 시도 :

{ 
    "_id" : "101", 
    "scores" : [ 
     { 
      "score" : "59.23", 
      "type" : "homework" 
     } 
    ] 
} 
{ 
    "_id" : "102", 
    "scores" : [ 
     { 
      "score" : "29.20", 
      "type" : "homework" 
     } 
    ] 
} 

그것은 단지 숙제 행을 반환하지만 지금 문제는 경우에만 각 문서로 문서 당 하나 개의 행을 반환하는 것입니다 숙제를 위해 2 개의 줄을 가지고있다, 나는 계속 보는 새로운 물건을 시험해보고있다!