복붙노트

[MONGODB] 기존의 모든 필드를 포함하고 문서에 새로운 필드를 추가

MONGODB

기존의 모든 필드를 포함하고 문서에 새로운 필드를 추가

나는 기존의 모든 필드를 나열하지 않고, 나는 새로운 필드를 추가하도록 지시하고 기존의 모든 필드를 포함 할 수있는 $ 프로젝트 집계 단계를 정의하고 싶습니다.

내 문서는 많은 분야로, 다음과 같습니다 :

{
    obj: {
        obj_field1: "hi",
        obj_field2: "hi2"
    },
    field1: "a",
    field2: "b",
    ...
    field26: "z"
}

이 같은 집계 작업을 만들고 싶어 :

[
    {
        $project: {
            custom_field: "$obj.obj_field1",
            //the next part is that I don't want to do
            field1: 1,
            field2: 1,
            ...
            field26: 1
        }
    },
    ... //group, match, and whatever...
]

나는이 경우에 사용할 수 있다는 "를 포함 모든 필드"키워드, 또는 개별적으로 모든 필드를 나열하는 것을 피하기 위해 다른 방법으로 같은 뭔가인가?

해결법

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

    1.4.2 이상, 당신은 3.4 $ addFieldsadded 별칭 이외의 아무 것도 $ 세트 집계 파이프 라인 연산자를 사용할 수 있습니다

    4.2 이상, 당신은 3.4 $ addFieldsadded 별칭 이외의 아무 것도 $ 세트 집계 파이프 라인 연산자를 사용할 수 있습니다

    db.collection.aggregate([
        { "$addFields": { "custom_field": "$obj.obj_field1" } }
    ])
    
  2. ==============================

    2.당신은 참조에 $$ ROOT 루트 문서를 사용할 수 있습니다. 필드에이 문서의 모든 필드를 유지하고 그 후에 그것을 얻을하려고 (클라이언트 시스템에 따라 : 자바, C ++, ...)

    당신은 참조에 $$ ROOT 루트 문서를 사용할 수 있습니다. 필드에이 문서의 모든 필드를 유지하고 그 후에 그것을 얻을하려고 (클라이언트 시스템에 따라 : 자바, C ++, ...)

     [
        {
            $project: {
                custom_field: "$obj.obj_field1",
                document: "$$ROOT"
    
            }
        },
        ... //group, match, and whatever...
    ]
    
  3. ==============================

    3.>>> 나는이 경우 또는 어떤 다른 솔루션에서 사용할 수있는 "포함하는 모든 필드"키워드와 같은 뭔가가있다?

    >>> 나는이 경우 또는 어떤 다른 솔루션에서 사용할 수있는 "포함하는 모든 필드"키워드와 같은 뭔가가있다?

    통합 작업에서 "모든 필드를 포함"에 Unfortunaly, 어떤 연산자가 없다. 집계가 대부분 (등 합계, 평균,) 수집 분야에서 그룹 / 계산 데이터를 생성하고 모든 컬렉션의 필드를 반환하기 때문에 유일한 이유는, 왜, 직접 목적으로하지 않습니다.

  4. ==============================

    4.버전 2.6.4로, 몽고 DB는 $ 프로젝트 집계 파이프 라인 등의 기능을 가지고 있지 않습니다. $ 프로젝트의 문서에서 :

    버전 2.6.4로, 몽고 DB는 $ 프로젝트 집계 파이프 라인 등의 기능을 가지고 있지 않습니다. $ 프로젝트의 문서에서 :

  5. ==============================

    5.문서에 새 필드를 추가하려면 당신은 $ addFields을 사용할 수 있습니다

    문서에 새 필드를 추가하려면 당신은 $ addFields을 사용할 수 있습니다

    문서에서

    및 문서의 필드 모두에, 당신은 $ $ ROOT를 사용할 수 있습니다

    db.collection.aggregate([
    
    { "$addFields": { "custom_field": "$obj.obj_field1" } },
    { "$group": {
            _id : "$field1",
            data: { $push : "$$ROOT" }
        }}
    ])
    
  6. ==============================

    6.@Deka 응답에 따라, C #의 MongoDB를 드라이버 2.5 당신은 다음과 같은 모든 키를 사용하여 그룹화 문서를 얻을 수 있습니다;

    @Deka 응답에 따라, C #의 MongoDB를 드라이버 2.5 당신은 다음과 같은 모든 키를 사용하여 그룹화 문서를 얻을 수 있습니다;

    var group = new BsonDocument
    {
     { "_id", "$groupField" },
     { "_document", new BsonDocument { { "$first", "$$ROOT" } } }
    };
    
    ProjectionDefinition<BsonDocument> projection = new BsonDocument{{ "document", "$_document"}};
    var result = await col.Aggregate().Group(group).Project(projection).ToListAsync();
    
    // For demo first record 
    var fistItemAsT = BsonSerializer.Deserialize<T>(result.ToArray()[0]["document"].AsBsonDocument);
    
  7. from https://stackoverflow.com/questions/19431773/include-all-existing-fields-and-add-new-fields-to-document by cc-by-sa and MIT license