복붙노트

[MONGODB] MongoDB의에서 검색 / 프로젝션을 수행 할 때 어떻게 필드의 이름을 변경합니까?

MONGODB

MongoDB의에서 검색 / 프로젝션을 수행 할 때 어떻게 필드의 이름을 변경합니까?

그것은 찾기 쿼리에서 반환 필드의 이름을 이름을 변경 할 수 있습니까? 그러나 나는 내가 접근하고있어 문서를 변경하지 않는 것처럼, $ 이름 바꾸기 같은 것을 사용하고 싶습니다. 난 그냥, 다른 SQL에서 SELECT COORINATES AS COORDS처럼 작동 뭔가를을 검색합니다.

내가 지금 무엇 :

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

내가 반환하고자하는 것은 : { '좌표': [10, 20]}

해결법

  1. ==============================

    1.그래서 기본적으로 대신 .find의 .aggregate을 () ()를 사용하여 :

    그래서 기본적으로 대신 .find의 .aggregate을 () ()를 사용하여 :

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

    그리고 그것은 당신에게 당신이 원하는 결과를 제공합니다.

    MongoDB를 2.6 이상 버전은 찾기가하는 것처럼는 "커서"를 반환합니다.

    자세한 내용은 $ 프로젝트 및 기타 집계 프레임 워크 연산자를 참조하십시오.

    대부분의 경우 당신은 단순히 커서를 처리 () 할 때 .find에서 반환되는 필드의 이름을 변경해야합니다. 예를 들어 자바 스크립트를 들어, 당신은이 작업을 수행 할 () .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 })
    )
    

    이것은 서버에 추가적인 오버 헤드를 회피하고, 추가 처리 오버 헤드가 검색된 데이터의 실제 크기 감소의 이득을 능가 것 인 그러한 경우에 사용되어야한다. 이 경우 (대부분의)는 최소한 따라서 더 나은 재 처리 구조 조정 커서 결과에있을 것이다.

  2. ==============================

    2.@Neil 룬에 의해 언급 한 바와 같이 이것은 집계 파이프 라인으로 달성 될 수있다 :

    @Neil 룬에 의해 언급 한 바와 같이 이것은 집계 파이프 라인으로 달성 될 수있다 :

    그리고 몽고 4.2부터 시작하여 $ replaceWith 집계 연산자는 하위 문서에서 문서를 대체하는 데 사용할 수 있습니다 :

    // { level1: { level2: { coordinates: [10, 20] }, b: 4 }, a: 3 }
    db.collection.aggregate(
      { $replaceWith: { coords: "$level1.level2.coordinates" } }
    )
    // { "coords" : [ 10, 20 ] }
    

    당신이 findOne을 언급 때문에, 당신은 또한 다음과 같은 일에 결과 문서의 수를 제한 할 수 있습니다 :

    db.collection.aggregate([
      { $replaceWith: { coords: "$level1.level2.coordinates" } },
      { $limit: 1 }
    ])
    

    이전 몽고 4.2과 몽고 3.4부터 $ replaceRoot은 $ replaceWith 대신 사용할 수 있습니다 :

    db.collection.aggregate(
      { $replaceRoot: { newRoot: { coords: "$level1.level2.coordinates" } } }
    )
    
  3. from https://stackoverflow.com/questions/23784370/how-do-i-rename-fields-when-performing-search-projection-in-mongodb by cc-by-sa and MIT license