복붙노트

[MONGODB] 몽고 그룹 푸시 : 모든 필드를 밀어

MONGODB

몽고 그룹 푸시 : 모든 필드를 밀어

"$ 푸시"문서의 모든 분야에 쉽게 방법이 있나요? 예를 들면 :

나는이 책의 몽고의 컬렉션이 말 :

{author: "tolstoy", title:"war & peace", price:100, pages:800}
{author: "tolstoy", title:"Ivan Ilyich", price:50,  pages:100}

나는 저자에 의해 그룹화하고 싶습니다 - 각 저자 목록에서 자신의 책 전체 개체에 대해 :

{ author: "tolstoy",
  books: [
     {author: "tolstoy", title:"war & peace", price:100, pages:800}
     {author: "tolstoy", title:"Ivan Ilyich", price:50,  pages:100}
  ]
}

내가 명시 적으로 모든 필드를 밀어하여이 작업을 수행 할 수 있습니다 :

{$group: {
     _id: "$author",
     books:{$push: {author:"$author", title:"$title", price:"$price", pages:"$pages"}},
}}

그러나 어떤 바로 가기의 라인에 뭔가가있다 :

// Fictional syntax...
{$group: {
    _id: "$author",
    books:{$push: "$.*"},
}}

해결법

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

    1.당신은 $$ ROOT를 사용할 수 있습니다

    당신은 $$ ROOT를 사용할 수 있습니다

    { $group : {
                _id : "$author",
                books: { $push : "$$ROOT" }
            }}
    

    여기 찾았 MongoDB를 집계을 사용하여 전체 문서를 검색하는 방법

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

    2.사실 당신은 당신이 전혀 무슨 말을 달성하지 못할, 당신은 언 와인드 $ 필요

    사실 당신은 당신이 전혀 무슨 말을 달성하지 못할, 당신은 언 와인드 $ 필요

    db.collection.aggregate([
        {$unwind: "$books"},
    
        {$group: {
             _id: "$author",
             books:{$push: {
                 author:"$books.author",
                 title:"$books.title",
                 price:"$books.price",
                 pages:"$books.pages"
             }},
        }}
    ])
    

    즉, 집합의 배열을 다루는 방법이다.

    그리고 당신은 모든 필드를 입력 바로 가기 찾고있는 것을 아직 존재하지 않습니다.

    당신이 방법에 그러나 특별히 때문에 당신이 다음 무엇을해야 당신이 문서를 재편, 어쨌든 할 수 없었다.

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

    3.문제는 당신이 명시 적으로 모든 필드를 작성하지 않을 것입니다 (문서가 많은 분야가 있다면 당신은 결과에 모두 필요) 경우에는지도-감소와 함께 할을 시도 할 수 있습니다 :

    문제는 당신이 명시 적으로 모든 필드를 작성하지 않을 것입니다 (문서가 많은 분야가 있다면 당신은 결과에 모두 필요) 경우에는지도-감소와 함께 할을 시도 할 수 있습니다 :

    db.books.mapReduce(
        function () { emit(this.author, this); },
        function (key, values) { return { books: values }; },
        { 
            out: { inline: 1 },
            finalize: function (key, reducedVal) { return reducedVal.books; } 
        }
    ) 
    
  4. from https://stackoverflow.com/questions/22150205/mongo-group-and-push-pushing-all-fields by cc-by-sa and MIT license