2014-11-07 5 views
0

모두! 내가 발견() 메서드를 사용하면mongodb에서 find()를 사용하여 필드를 정렬합니다.

{ 
    fname: value, 
    lname: value, 
    city: value 
} 

, 나는 기본 주문 FNAME, LNAME, 도시의 결과를 얻을 : 내 문서와 같은 구조를 가지고있다. 그러나 나는 city, fname, lname과 같은 다른 필드 순서로 결과를 얻고 싶습니다. mongodb는 결과에서 필드 정렬을 허용합니까?

+1

당신은 필드의 순서에 대해 신경 이유가 궁금 참조하십시오. 잘못된 문제를 해결하려고 할 수도 있습니다. – JohnnyHK

답변

1

예. 아니요. 실제로 이런 조작을하려면 aggregation framework이 필요합니다. 주문을 변경하려면 필드의 이름을 변경해야하기 때문에 조금 까다 롭습니다. 이는 하나의 "파이프 라인"단계에서 다른 단계로 콘텐츠를 "복사"하는 일반적인 최적화가 있기 때문입니다. 이것은 최적의 것으로 간주됩니다.

db.collection.aggregate([ 
    { "$project": { 
     "tcity": "$city", 
     "tfname": "$fname", 
     "tlname": "$lanme" 
    }}, 
    { "$project": { 
     "city": "$tcity", 
     "fname": "$tfname", 
     "lname": "$tlname" 
    }} 
]) 

매우 인위적인하지만 당신이 그것을 할 수있는 방법입니다

하지만 당신은 항상이 작업을 수행 할 수 있습니다. 그렇지 않으면 원하는 순서로 "이름이 바뀐"필드에 대한 단일 프로젝션으로 살고 코드에서 다시 "이름 바꾸기"를 수행하십시오.

물론 코드는 쿼리 결과의 필드 이름을 "다시 매핑"할 수 있습니다.

그러나 기본 점은 MongoDB 자체가 필드의 원래 순서를 "최적화"로 "보존"하여 저장 방법을 지정하고 그렇지 않은 경우 출력을 엉망으로 만들지 않는다는 것입니다. 당신이 원한다면 그렇게 할 수 있지만, 그렇게하기 위해서는 그림과 같이 조치를 취해야합니다.

+0

그러나이 프로젝션 베팅은 기본적으로 정렬되거나 sort() 메소드를 호출해야합니다. – vmr

+0

@vmr 필드 순서와 결과 정렬은 두 가지가 있습니다. 정렬은 필드 이름이 아닌 내용에 적용됩니다. 제 생각에 일반적인 합의는 MongoDB가 특정 순서로 필드를 출력하도록 "강제 할 수있는 동안"처리해야하는 일반적인 방법은 "결과"가 반환된다는 것입니다. 나는 그렇게하기에는 우스꽝 스럽다는 것을 보여줄 수 있다는 것을 보여줄뿐입니다. –

0

Mongo 셸에서 출력물을 표시한다고 가정합니까? 그렇다면 반환 된 출력을 변수 (커서, 나는 믿습니다)에 할당하고 나중에 커서를 이동하여 개별 필드 변수를 원하는 순서대로 출력 할 수 있습니다.

관련 문제