2014-05-21 5 views
23

찾기 쿼리에서 반환 된 필드의 이름을 바꿀 수 있습니까? $rename과 같은 것을 사용하고 싶습니다만, 액세스하고있는 문서를 변경하고 싶지는 않습니다. 다르게 그들을 검색하고 싶습니다. SQL에서 SELECT COORINATES AS COORDS처럼 작동합니다.MongoDB에서 검색/투영을 수행 할 때 필드의 이름을 바꾸려면 어떻게해야합니까?

내가 지금 무엇을 : 나는 반환하고 싶은 무엇

db.tweets.findOne({}, {'level1.level2.coordinates': 1, _id:0}) 
{'level1': {'level2': {'coordinates': [10, 20]}}} 

은 다음과 같습니다

db.tweets.aggregate([ 
    { "$project": { 
     "_id": 0, 
     "coords": "$level1.level2.coordinates" 
    }} 
]) 

그리고 그 : {'coords': [10, 20]}

답변

23

그래서 기본적으로 .aggregate() 대신 .find()를 사용하여 원하는 결과를 제공합니다.

MongoDB 2.6 이상 버전은 find와 마찬가지로 "커서"를 반환합니다.

자세한 내용은 $project 및 기타 aggregation framework operators을 참조하십시오.


대부분의 경우 당신은 단순히 커서를 처리 할 때 .find()에서 반환되는 필드의 이름을 변경해야합니다. 예를 들어 JavaScript의 경우 .map()을 사용하면됩니다. 쉘에서

:

db.tweets.find({},{'level1.level2.coordinates': 1, _id:0}).map(doc => { 
    doc.coords = doc['level1']['level2'].coordinates; 
    delete doc['level1']; 
    return doc; 
}) 

이상의 인라인 :

db.tweets.find({},{'level1.level2.coordinates': 1, _id:0}).map(doc => 
    ({ coords: doc['level1']['level2'].coordinates }) 
) 

이 서버에 추가 오버 헤드를 방지하고 추가적인 처리 오버 헤드가 이득을 능가 할 곳과 같은 경우에 사용한다 검색된 데이터의 실제 크기 축소 이 경우 (그리고 대부분) 최소한의 것이므로 커서 결과를 재구성하여 구조 조정하는 것이 좋습니다.

관련 문제