복붙노트

[MONGODB] MongoDB의의 $ 프로젝트 : 이전의 파이프 라인 필드를 유지 [중복]

MONGODB

MongoDB의의 $ 프로젝트 : 이전의 파이프 라인 필드를 유지 [중복]

방법은 MongoDB를 돌기에, 새로운 필드를 지정합니다 (그러나 동시에, 파이프 라인의 투사 단계에 입력 된 필드를 유지)이 있습니까? 나는 기존 필드의 이름을 변경하고 있지 않다.

그래서 나는 '필드 1'과 'FIELD2'이있는 컬렉션을 시작, 다음과 같은 투사 할 경우 :

{ $project: { field3: { $gt: ['$field1', 10] } } }

I는 통합 프레임 워크에서 '필드 1', '2 필드', 다음 스테이지에 대한 입력으로 'FIELD3'본 또는 출력 결국 싶다.

나는 _id 제외하여 제외 모드로 투사를 넣어 시도,하지만 그 일을하지 않습니다.

해결법

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

    1.MongoDB를 2.6은 거의 당신이 원하는 않는 새로운 $$ ROOT 집계 변수를 도입 : 당신이 알고 있거나 포함 필드를 지정할 필요가 없습니다 전체 문서가, 현재 파이프 라인 단계에서 처리되는 포함됩니다.

    MongoDB를 2.6은 거의 당신이 원하는 않는 새로운 $$ ROOT 집계 변수를 도입 : 당신이 알고 있거나 포함 필드를 지정할 필요가 없습니다 전체 문서가, 현재 파이프 라인 단계에서 처리되는 포함됩니다.

    귀하의 예를 집계 촬영 및 $$ ROOT와 필드 투영을 추가 :

    db.pipeline.aggregate(
        { $project: {
            field3: {
                $gt: ['$field1', 10]
            },
            fields: "$$ROOT"
        }}
    )
    

    출력은 신규 필드 계산은 모든 원래의 필드를 포함한다 :

    {
        "_id" : ObjectId("53b56cc542974939144cee2a"),
        "field3" : false,
        "fields" : {
            "_id" : ObjectId("53b56cc542974939144cee2a"),
            "field1" : 1,
            "field2" : 2,
            "field3" : 3
        }
    }
    

    MongoDB를 3.3.11 소개하고는 addFields 당신이 원하는 것을 그 단계를 응집. MongoDB의 문제 추적기에서이 항목을 참조하십시오 : SERVER-5781이 - 문서에 새 필드를 추가하는 표현 언어를 사용하는 $ addFields 집계 단계를 구현합니다.

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

    2.$ 프로젝트의 요구가 통과 할 수있는 필드를 지정하는 경우, $ addFields 모든 필드를 반환하고 추가하거나 지정된 필드를 대체합니다.

    $ 프로젝트의 요구가 통과 할 수있는 필드를 지정하는 경우, $ addFields 모든 필드를 반환하고 추가하거나 지정된 필드를 대체합니다.

    { $addFields: { field3: { $gt: ['$field1', 10] } } }
    

    정확히 당신이 원하는 것을 달성 할 것이다.

    주의 사항이 기능은 몽고 버전 3.4에서 추가되었다.

  3. ==============================

    3.만 기본적으로 투사됩니다 _ID. 당신은 다른 필드가 투영 될 것을 지정해야합니다.

    만 기본적으로 투사됩니다 _ID. 당신은 다른 필드가 투영 될 것을 지정해야합니다.

    { $project: { field1:1,field2:1, field3: { $gt: ['$field1', 10] } } }
    

    또는

    { $project: { field1:'$field1',field2:'$field2', field3: { $gt: ['$field1', 10] } } }
    
  4. from https://stackoverflow.com/questions/20497499/mongodb-project-retain-previous-pipeline-fields by cc-by-sa and MIT license