2011-12-07 2 views
0

mongodb의 grouping 기능을 테스트하고 있습니다.MongoDB 그룹화는 여러 문서와 일치하더라도 하나의 문서 만 반환합니까?

group 함수는 객체를 인수로 취합니다. 객체 내에는 cond이라는 키가 있으며이 중 값은 문서와 일치하는 쿼리로 사용될 수 있습니다.

하나 이상의 문서와 일치하는 유효한 쿼리를 전달 중입니다. 그러나 그룹화는 마지막으로 일치 된 문서의 결과 만 반환합니다. 나는 group 함수가 모든 일치 된 문서 결과를 반환하도록하기 위해 여기에 뭔가 빠졌다고 생각합니다.

내가이 짓을하는 단계는,

db.test.insert({user:{name:"xxxx1"}}); 
db.test.insert({user:{name:"xxxx2"}}); 
db.test.insert({user:{name:"xxxx3"}}); 
db.test.insert({user:{name:"xxxx4"}}); 
db.test.insert({user:{name:"xxxx5"}}); 
db.test.insert({user:{name:"xxxx6"}}); 


db.test.group({ 
    initial:{name:'', id:''}, 
    reduce:function(d, o){o.name = d.user.name; o.id=d._id;}, 
    finalize:function(o){}, 
    cond:{"user.name":/^x/} 
    }); 

위의 명령을 반환

[ 
    { 
    "name" : "xxxx6", "id" : ObjectId("4edf72baec65faac52976e72") 
    } 
] 

그것의 마지막 삽입 된 문서

.

일치하는 결과를 모두 얻으려면 어떻게해야합니까?

감사

답변

1

는 "모든 일치 된 문서의 결과를 반환"당신은 아마 대신 그룹의 쿼리를 수행하는 것을 의미합니다. 그룹화는 일치하는 모든 항목 (단순히 원하는 것)을 반환하는 대신 키를 기반으로 문서를 집계하는 데 사용됩니다.

이 그 다음을 사용이

"내가 완전한 문서를 보내려면 해달라고"

db.test.find({"user.name": /^x/}) 

업데이트는 새로운 정보를 해결하기 위해 :

그냥 귀하의 경우에있을 것입니다 db.collection.find(query-document)을 수행 원하는 필드가있는 문서를 제공하기 위해 find의 두 번째 매개 변수 { "user.name": 1 }. _id가 기본적으로 포함되어 있지만 {_id: 0}을 사용하려면 제외 할 수 있습니다. 순서를 기억하는 것이 중요하다면

하여 포맷에 관해서는, 다음의 배열을 사용한다. 주문이 중요하지 않고 디스플레이 목적으로 사용되는 경우 클라이언트 측에서만 주문하십시오. map reduce를 사용하여 출력을 형식화하는 것은 의도 한 용도가 아니며 쿼리를 느리게하는 역할 만합니다.

+0

는 사실 조회 결과는 자동 완성의 목적을 위해 이용 될 것입니다,하지만 난 그것에 대해 완전한 문서를 보낼 해달라고 나는 또한 {ID 표준에 쿼리 결과를 포맷하고 싶어 ''이름 : '', 이메일 : ''사진 : ''}. 이전에는 수동으로 형식을 지정하고있었습니다 (쿼리 결과를 가져 와서 모든 결과 문서를 반복하고 새로운 형식을 작성). 나중에 나는 그것이 몽고 그 자체를 사용하여 그것을 할 수 있다는 것을 알게되었다. 그리고 내가 거기에서 뭘하려고하는지. 나는 쿼리를 사용하여 모든 일치하는 문서를 가져오고 그룹화를 사용하여 형식을 지정하려고합니다. 그것이 몽고와 함께 가능합니까! –

+0

내 업데이트가 도움이 되었습니까? –

+0

'map reduce를 사용하여 출력 형식을 지정하면 의도 한 용도가 아니며 이에 대한 쿼리 속도가 느려지 게됩니다. ' 이미 당신이 말한 모든 것을하고 있기 때문입니다. 나는 데이터를 일반화하고 다양한 컬렉션에서 공통 패턴을 얻도록 서식을 지정해야합니다. 쿼리 결과를 공통 형식으로 일반화해야한다면 수동으로 여러 위치에 코드를 작성해야합니다. 대신 DB를 선호합니다. –

관련 문제