복붙노트

[MONGODB] 어떻게 SQL은 MongoDB의에 해당하는 가입 실시합니다합니까?

MONGODB

어떻게 SQL은 MongoDB의에 해당하는 가입 실시합니다합니까?

어떻게 SQL은 MongoDB의에 해당하는 가입 실시합니다합니까?

예를 들어 두 개의 컬렉션 (사용자와 의견을) 가지고 있고 각각의 사용자 정보와 함께 PID = 444 모든 주석을 끌어하고 싶은 말은.

comments
  { uid:12345, pid:444, comment="blah" }
  { uid:12345, pid:888, comment="asdf" }
  { uid:99999, pid:444, comment="qwer" }

users
  { uid:12345, name:"john" }
  { uid:99999, name:"mia"  }

특정 필드 모든 의견을 당겨하는 방법이 있나요 (예를 들면 ... 찾을 수 있습니다. ({PID : 444}))와 한 번에 각 주석과 관련된 사용자 정보?

지금이 순간, 내가 먼저 한 후, 그 결과 세트에있는 모든 UID의를 알아내는 사용자 개체를 받고, 및 주석의 결과로 병합, 내 기준과 일치하는 의견을 얻고있다. 내가 잘못을하고있는 중이 야처럼 보인다.

해결법

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

    1.몽고 3.2으로이 질문에 대한 답변은 더 이상 대부분 정확하지 않습니다. 집약 파이프 라인에 추가 된 새로운 $ 룩업 연산자 왼쪽 외부 본질적으로 동일 조인

    몽고 3.2으로이 질문에 대한 답변은 더 이상 대부분 정확하지 않습니다. 집약 파이프 라인에 추가 된 새로운 $ 룩업 연산자 왼쪽 외부 본질적으로 동일 조인

    https://docs.mongodb.org/master/reference/operator/aggregation/lookup/#pipe._S_lookup

    워드 프로세서 :

    {
       $lookup:
         {
           from: <collection to join>,
           localField: <field from the input documents>,
           foreignField: <field from the documents of the "from" collection>,
           as: <output array field>
         }
    }
    

    물론 몽고는 관계형 데이터베이스 아니며, DEVS는 $ 조회에 대한 특정 사용 사례를 추천 조심하지만, 일을 3.2로 적어도 MongoDB를 함께 가능해 가입되어 있습니다.

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

    2.공식 MongoDB의 사이트 주소를 정확히이 질문에이 페이지 :

    공식 MongoDB의 사이트 주소를 정확히이 질문에이 페이지 :

    http://docs.mongodb.org/ecosystem/tutorial/model-data-for-ruby-on-rails/

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

    3.우리는 / 병합 MongoDB를 클라이언트 콘솔을 사용하여 몇 줄에서 쉽게 기능을 내부에 하나의 콜렉션을 모든 데이터를 결합하고, 지금 우리가 원하는 쿼리를 수행의 할 수 있습니다. 완전한 예를 아래에,

    우리는 / 병합 MongoDB를 클라이언트 콘솔을 사용하여 몇 줄에서 쉽게 기능을 내부에 하나의 콜렉션을 모든 데이터를 결합하고, 지금 우리가 원하는 쿼리를 수행의 할 수 있습니다. 완전한 예를 아래에,

    .- 저자 :

    db.authors.insert([
        {
            _id: 'a1',
            name: { first: 'orlando', last: 'becerra' },
            age: 27
        },
        {
            _id: 'a2',
            name: { first: 'mayra', last: 'sanchez' },
            age: 21
        }
    ]);
    

    .- 카테고리 :

    db.categories.insert([
        {
            _id: 'c1',
            name: 'sci-fi'
        },
        {
            _id: 'c2',
            name: 'romance'
        }
    ]);
    

    .- 책

    db.books.insert([
        {
            _id: 'b1',
            name: 'Groovy Book',
            category: 'c1',
            authors: ['a1']
        },
        {
            _id: 'b2',
            name: 'Java Book',
            category: 'c2',
            authors: ['a1','a2']
        },
    ]);
    

    .- 도서 대출

    db.lendings.insert([
        {
            _id: 'l1',
            book: 'b1',
            date: new Date('01/01/11'),
            lendingBy: 'jose'
        },
        {
            _id: 'l2',
            book: 'b1',
            date: new Date('02/02/12'),
            lendingBy: 'maria'
        }
    ]);
    

    마법을 .- :

    db.books.find().forEach(
        function (newBook) {
            newBook.category = db.categories.findOne( { "_id": newBook.category } );
            newBook.lendings = db.lendings.find( { "book": newBook._id  } ).toArray();
            newBook.authors = db.authors.find( { "_id": { $in: newBook.authors }  } ).toArray();
            db.booksReloaded.insert(newBook);
        }
    );
    

    새로운 콜렉션 데이터를 가져옵니다 .- :

    db.booksReloaded.find().pretty()
    

    .- 응답 :

    {
        "_id" : "b1",
        "name" : "Groovy Book",
        "category" : {
            "_id" : "c1",
            "name" : "sci-fi"
        },
        "authors" : [
            {
                "_id" : "a1",
                "name" : {
                    "first" : "orlando",
                    "last" : "becerra"
                },
                "age" : 27
            }
        ],
        "lendings" : [
            {
                "_id" : "l1",
                "book" : "b1",
                "date" : ISODate("2011-01-01T00:00:00Z"),
                "lendingBy" : "jose"
            },
            {
                "_id" : "l2",
                "book" : "b1",
                "date" : ISODate("2012-02-02T00:00:00Z"),
                "lendingBy" : "maria"
            }
        ]
    }
    {
        "_id" : "b2",
        "name" : "Java Book",
        "category" : {
            "_id" : "c2",
            "name" : "romance"
        },
        "authors" : [
            {
                "_id" : "a1",
                "name" : {
                    "first" : "orlando",
                    "last" : "becerra"
                },
                "age" : 27
            },
            {
                "_id" : "a2",
                "name" : {
                    "first" : "mayra",
                    "last" : "sanchez"
                },
                "age" : 21
            }
        ],
        "lendings" : [ ]
    }
    

    나는이 선 당신을 도울 수 있기를 바랍니다.

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

    4.당신은 당신이 설명하는 방법을해야한다. MongoDB를 비 관계형 데이터베이스입니다하지 지원이 합류한다.

    당신은 당신이 설명하는 방법을해야한다. MongoDB를 비 관계형 데이터베이스입니다하지 지원이 합류한다.

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

    5.여기에 "참여"* 배우 및 영화 컬렉션의 예입니다 :

    여기에 "참여"* 배우 및 영화 컬렉션의 예입니다 :

    https://github.com/mongodb/cookbook/blob/master/content/patterns/pivot.txt

    그것은 .mapReduce의 () 메서드를 사용하는 방법을 만든다

    * 가입 - 대안을 문서 지향 데이터베이스에 가입

  6. ==============================

    6.다른 사람들이 지적했듯이 당신이 정말 당신이 여기에이 작업을 수행해야하는 경우가 있다면, 어쨌든 할 수 있지만하고 싶지 않은 것도 관계형 데이터베이스에서 관계형 데이터베이스를 만들려고하면 사용할 수있는 솔루션입니다. 우리가 경우에 우리는 첫 컬렉션 A의 foreach는 찾기를 할 (또는 귀하의 경우 사용자에) 우리는 (귀하의 경우 주석에) 두 번째 컬렉션 조회하기 (귀하의 경우 UID에) 객체 속성을 사용하여 다음 개체로 우리는 각 항목을 얻을 그것을 찾을 수 있습니다 우리는 경기를 가지고 우리는 인쇄하거나 그것으로 뭔가를 할 수 있습니다. 이 당신과 행운을 도움이되기를 바랍니다 :)

    다른 사람들이 지적했듯이 당신이 정말 당신이 여기에이 작업을 수행해야하는 경우가 있다면, 어쨌든 할 수 있지만하고 싶지 않은 것도 관계형 데이터베이스에서 관계형 데이터베이스를 만들려고하면 사용할 수있는 솔루션입니다. 우리가 경우에 우리는 첫 컬렉션 A의 foreach는 찾기를 할 (또는 귀하의 경우 사용자에) 우리는 (귀하의 경우 주석에) 두 번째 컬렉션 조회하기 (귀하의 경우 UID에) 객체 속성을 사용하여 다음 개체로 우리는 각 항목을 얻을 그것을 찾을 수 있습니다 우리는 경기를 가지고 우리는 인쇄하거나 그것으로 뭔가를 할 수 있습니다. 이 당신과 행운을 도움이되기를 바랍니다 :)

    db.users.find().forEach(
    function (object) {
        var commonInBoth=db.comments.findOne({ "uid": object.uid} );
        if (commonInBoth != null) {
            printjson(commonInBoth) ;
            printjson(object) ;
        }else {
            // did not match so we don't care in this case
        }
    });
    
  7. ==============================

    7.$ 조회, $ 프로젝트와 $ 일치의 적절한 조합으로, 당신은 여러 매개 변수에 여러 개의 테이블을 조인 할 수 있습니다. 그들은 여러 번 체인 될 수 있기 때문이다.

    $ 조회, $ 프로젝트와 $ 일치의 적절한 조합으로, 당신은 여러 매개 변수에 여러 개의 테이블을 조인 할 수 있습니다. 그들은 여러 번 체인 될 수 있기 때문이다.

    우리는 다음을 수행한다고 가정 (참조)

    SELECT S.* FROM LeftTable S
    LEFT JOIN RightTable R ON S.ID =R.ID AND S.MID =R.MID WHERE R.TIM >0 AND 
    S.MOB IS NOT NULL
    

    1 단계 : 모든 테이블 링크

    당신이 원하는대로 당신은 많은 테이블로 조회 $ 할 수 있습니다.

    $ 조회 - 쿼리의 각 테이블에 대해 하나

    $ 언 와인드 - 데이터가 다른, 제대로 denormalised 배열에 싸여 있기 때문에

    파이썬 코드 ..

    db.LeftTable.aggregate([
                            # connect all tables
    
                            {"$lookup": {
                              "from": "RightTable",
                              "localField": "ID",
                              "foreignField": "ID",
                              "as": "R"
                            }},
                            {"$unwind": "R"}
    
                            ])
    

    2 단계 : 모든 조건문을 정의

    $ 프로젝트 : 당신이 선택하고 싶은 여기에 모든 조건문, 플러스 모든 변수를 정의합니다.

    파이썬 코드 ..

    db.LeftTable.aggregate([
                            # connect all tables
    
                            {"$lookup": {
                              "from": "RightTable",
                              "localField": "ID",
                              "foreignField": "ID",
                              "as": "R"
                            }},
                            {"$unwind": "R"},
    
                            # define conditionals + variables
    
                            {"$project": {
                              "midEq": {"$eq": ["$MID", "$R.MID"]},
                              "ID": 1, "MOB": 1, "MID": 1
                            }}
                            ])
    

    3 단계 : 모든 조건문에 참여

    $ 일치 - 이들의 배수가있을 수 있습니다 OR 또는 AND 등을 사용하여 모든 조건을 가입 할 수 있습니다.

    $ 프로젝트 : 모든 조건문을 정의를 해제

    파이썬 코드 ..

    db.LeftTable.aggregate([
                            # connect all tables
    
                            {"$lookup": {
                              "from": "RightTable",
                              "localField": "ID",
                              "foreignField": "ID",
                              "as": "R"
                            }},
                            {"$unwind": "$R"},
    
                            # define conditionals + variables
    
                            {"$project": {
                              "midEq": {"$eq": ["$MID", "$R.MID"]},
                              "ID": 1, "MOB": 1, "MID": 1
                            }},
    
                            # join all conditionals
    
                            {"$match": {
                              "$and": [
                                {"R.TIM": {"$gt": 0}}, 
                                {"MOB": {"$exists": True}},
                                {"midEq": {"$eq": True}}
                            ]}},
    
                            # undefine conditionals
    
                            {"$project": {
                              "midEq": 0
                            }}
    
                            ])
    

    예쁜 테이블, 조건문의 조합 많은이 방식으로 수행 할 수 있습니다 조인.

  8. ==============================

    8.그것은 당신이 뭘 하려는지에 따라 달라집니다.

    그것은 당신이 뭘 하려는지에 따라 달라집니다.

    현재는 괜찮 정규화 된 데이터베이스로 설정, 그리고 당신이 그것을하고있는 방법은 적절하다.

    그러나 그 일을 다른 방법이 있습니다.

    당신은 당신이 반복적으로 얻을 조회 할 수있는 사용자에 대한 참조와 각 게시물에 대한 의견을 새겨 져있는 글 모음을 가질 수 있습니다. 당신은 당신이 모두 하나 개의 문서에 저장할 수 코멘트와 함께 사용자의 이름을 저장할 수 있습니다.

    NoSQL이 가진 것은 그것이 유연한 스키마와 매우 빠른 읽기와 쓰기를위한 설계이다. 일반적인 빅 데이터 팜의 데이터베이스는 또한 하드 드라이브 공간이 아주 싼 비교적, 더 비싸지 만 더 강력한있어 ... 당신은 응용 프로그램 및 프런트 엔드 서버를보다 더 적은 데이터베이스 엔진이 가장 큰 병목 현상입니다. 정규화는 공간을 절약하기 위해 노력의 개념에서 온다, 그러나 당신의 데이터베이스가 복잡 조인 실시합니다 만들기 및 관계의 무결성을 검증, 계단식 작업을 수행하기에 비용이 함께 제공됩니다. 이는 모두 제대로 데이터베이스를 설계 약간의 두통이 경우 개발자를 저장합니다.

    당신이 중복 및 저장 공간에 동의하면되는 NoSQL로, 때문에 비용없는 문제는 비정규, (두 프로세서 시간에 여분의 데이터를 저장하는 업데이트 및 하드 드라이브의 비용을 필요)가 포함 된 배열을 위해 (문제가되지 않습니다 있습니다 항목의 수천의 수백은 성능 문제가 될 수 있지만) 문제가되지 않습니다 대부분의 시간을 할 수 있습니다. 또한 당신은 모든 데이터베이스 클러스터의 여러 응용 프로그램 및 프런트 엔드 서버를해야합니다. 그들의 무거운 리프팅을 한 조인 및 데이터베이스 서버는 읽기와 쓰기에 충실하자.

    TL; DR : 당신이 무슨 일을하는지 잘, 그리고 그 일을 다른 방법이 있습니다. 훌륭한 예제의 MongoDB를 문서의 데이터 모델 패턴을 확인하세요. http://docs.mongodb.org/manual/data-modeling/

  9. ==============================

    9.당신은 3.2 버전에서 제공되는 조회를 사용하여 MongoDB를 두 모음을 가입 할 수 있습니다. 귀하의 경우에는 쿼리가 될 것이다

    당신은 3.2 버전에서 제공되는 조회를 사용하여 MongoDB를 두 모음을 가입 할 수 있습니다. 귀하의 경우에는 쿼리가 될 것이다

    db.comments.aggregate({
        $lookup:{
            from:"users",
            localField:"uid",
            foreignField:"uid",
            as:"users_comments"
        }
    })
    

    아래로 사용자가 다음 약간의 변화가있을 것입니다에 또는 당신은 또한 관련하여 가입 할 수 있습니다.

    db.users.aggregate({
        $lookup:{
            from:"comments",
            localField:"uid",
            foreignField:"uid",
            as:"users_comments"
        }
    })
    

    그것은 왼쪽처럼 같은 일을하고 SQL 바로 가입됩니다.

  10. ==============================

    10.드라이버의 많은 DBRef라고 그의를 지원하는 사양이있다.

    드라이버의 많은 DBRef라고 그의를 지원하는 사양이있다.

    MongoDB의 문서에서 발췌 : 데이터 모델> 데이터 모델 참조> 데이터베이스 참조

  11. ==============================

    11.행하는 왼쪽 외부 처리에 대한 "결합"컬렉션에서 문서 필터 같은 데이터베이스에 수집 unsharded 조인. 각 문서에 대한 입력은 $ 조회 단계는, 그 엘리먼트은 "결합"컬렉션에서 일치되는 문서 새로운 배열 필드를 추가한다. $ 조회 단계는 다음 단계로이 고쳐 문서를 전달합니다. $ 조회 단계는 다음과 같은 구문이 있습니다 :

    행하는 왼쪽 외부 처리에 대한 "결합"컬렉션에서 문서 필터 같은 데이터베이스에 수집 unsharded 조인. 각 문서에 대한 입력은 $ 조회 단계는, 그 엘리먼트은 "결합"컬렉션에서 일치되는 문서 새로운 배열 필드를 추가한다. $ 조회 단계는 다음 단계로이 고쳐 문서를 전달합니다. $ 조회 단계는 다음과 같은 구문이 있습니다 :

    은 "합류"모음의 문서에서 필드 입력 문서의 필드 사이의 평등 일치를 수행하려면 $ 조회 단계의 구문은 다음과 같습니다

    {
       $lookup:
         {
           from: <collection to join>,
           localField: <field from the input documents>,
           foreignField: <field from the documents of the "from" collection>,
           as: <output array field>
         }
    }
    

    동작은 다음과 같은 의사-SQL 문에 해당하는 것입니다 :

    SELECT *, <output array field>
    FROM collection
    WHERE <output array field> IN (SELECT <documents as determined from the pipeline>
                                   FROM <collection to join>
                                   WHERE <pipeline> );
    

    몽고 URL

  12. ==============================

    12.3.2.6하기 전에, MongoDB를 MySQL의 등 쿼리에 가입 지원하지 않습니다. 당신을 위해 일하는 아래의 솔루션입니다.

    3.2.6하기 전에, MongoDB를 MySQL의 등 쿼리에 가입 지원하지 않습니다. 당신을 위해 일하는 아래의 솔루션입니다.

     db.getCollection('comments').aggregate([
            {$match : {pid : 444}},
            {$lookup: {from: "users",localField: "uid",foreignField: "uid",as: "userData"}},
       ])
    
  13. ==============================

    13.당신은 SQL 쿼리 포스트 그레스에서 mongo_fdw와 MongoDB를 조인을 포함하여 실행할 수 있습니다.

    당신은 SQL 쿼리 포스트 그레스에서 mongo_fdw와 MongoDB를 조인을 포함하여 실행할 수 있습니다.

  14. ==============================

    14.MongoDB를 조인을 허용하지 않습니다,하지만 당신은 그것을 처리하기 위해 플러그인을 사용할 수 있습니다. 체크 플러그인 몽고을 조인. 그것은 최선의 나는 이미 그것을 사용했다. 당신은 설치 NPM과 같이 직접 NPM을 사용하여 설치할 수 있습니다 몽고을 조인. 당신은 예제와 함께 전체 설명서를 확인할 수 있습니다.

    MongoDB를 조인을 허용하지 않습니다,하지만 당신은 그것을 처리하기 위해 플러그인을 사용할 수 있습니다. 체크 플러그인 몽고을 조인. 그것은 최선의 나는 이미 그것을 사용했다. 당신은 설치 NPM과 같이 직접 NPM을 사용하여 설치할 수 있습니다 몽고을 조인. 당신은 예제와 함께 전체 설명서를 확인할 수 있습니다.

    (++) 정말 유용한 도구를 우리가 (N) 컬렉션을 가입해야 할 때

    (-) 우리는 단지 쿼리의 최상위에 조건을 적용 할 수 있습니다

    var Join = require('mongo-join').Join, mongodb = require('mongodb'), Db = mongodb.Db, Server = mongodb.Server;
    db.open(function (err, Database) {
        Database.collection('Appoint', function (err, Appoints) {
    
            /* we can put conditions just on the top level */
            Appoints.find({_id_Doctor: id_doctor ,full_date :{ $gte: start_date },
                full_date :{ $lte: end_date }}, function (err, cursor) {
                var join = new Join(Database).on({
                    field: '_id_Doctor', // <- field in Appoints document
                    to: '_id',         // <- field in User doc. treated as ObjectID automatically.
                    from: 'User'  // <- collection name for User doc
                }).on({
                    field: '_id_Patient', // <- field in Appoints doc
                    to: '_id',         // <- field in User doc. treated as ObjectID automatically.
                    from: 'User'  // <- collection name for User doc
                })
                join.toArray(cursor, function (err, joinedDocs) {
    
                    /* do what ever you want here */
                    /* you can fetch the table and apply your own conditions */
                    .....
                    .....
                    .....
    
    
                    resp.status(200);
                    resp.json({
                        "status": 200,
                        "message": "success",
                        "Appoints_Range": joinedDocs,
    
    
                    });
                    return resp;
    
    
                });
    
        });
    
  15. ==============================

    15.당신은 통합 파이프 라인을 사용하여 그것을 할 수 있지만 스스로를 작성하는 고통입니다.

    당신은 통합 파이프 라인을 사용하여 그것을 할 수 있지만 스스로를 작성하는 고통입니다.

    당신은 당신의 쿼리에서 자동으로 집계 파이프 라인을 만들 몽고 조인 쿼리를 사용할 수 있습니다.

    이 쿼리의 모습 방법입니다

    const mongoose = require("mongoose");
    const joinQuery = require("mongo-join-query");
    
    joinQuery(
        mongoose.models.Comment,
        {
            find: { pid:444 },
            populate: ["uid"]
        },
        (err, res) => (err ? console.log("Error:", err) : console.log("Success:", res.results))
    );
    

    귀하의 결과는 UID 필드에 사용자 개체있을 것입니다 당신이 원하는대로 당신은 깊은 많은 수준으로 링크 할 수 있습니다. 당신은 등 다른 일을 참조하게 팀을 참조를 만드는 사용자에 대한 참조를 채울 수 있습니다 ..

    면책 조항 :이 정확한 문제를 해결하기 위해 몽고 조인 쿼리를 썼다.

  16. ==============================

    16.playORM은 파티션 내에서 조인 당신이 할 수 있도록 분할 추가합니다 S-SQL (확장 SQL)를 사용하여 당신을 위해 그것을 할 수 있습니다.

    playORM은 파티션 내에서 조인 당신이 할 수 있도록 분할 추가합니다 S-SQL (확장 SQL)를 사용하여 당신을 위해 그것을 할 수 있습니다.

  17. ==============================

    17.당신이 잘못을하고있는 것처럼 아니, 그것은 보이지 않는다. MongoDB의는 "클라이언트 측"입니다 합류했다. 거의처럼 말했다 :

    당신이 잘못을하고있는 것처럼 아니, 그것은 보이지 않는다. MongoDB의는 "클라이언트 측"입니다 합류했다. 거의처럼 말했다 :

    1) Select from the collection you're interested in.
    2) From that collection pull out ID's you need
    3) Select from other collections
    4) Decorate your original results.
    

    그것은 아닌 "진짜"의 가입하지만 많이 실제로 중복 행을 처리하지 않기 때문에 SQL 조인보다 더 유용하다 "다"대신이 원래 선택한 세트를 장식, 조인 편.

    이 페이지에 말도 안되는 및 FUD 많이 있습니다. 오년 밝혀 나중에 MongoDB를 여전히 것입니다.

  18. ==============================

    18.하지만 힘내에 몽고에 대한 해결책을 발견했습니다 그런데, 삽입 코드 -이 영화의 이름,하지만 노이 영화의 ID가 있습니다.

    하지만 힘내에 몽고에 대한 해결책을 발견했습니다 그런데, 삽입 코드 -이 영화의 이름,하지만 노이 영화의 ID가 있습니다.

    당신은 그들이 수행 한 영화의 배열과 배우의 컬렉션을 가지고있다.

    당신은 각 배우의 배열과 영화의 컬렉션을 생성합니다.

    일부 샘플 데이터

     db.actors.insert( { actor: "Richard Gere", movies: ['Pretty Woman', 'Runaway Bride', 'Chicago'] });
     db.actors.insert( { actor: "Julia Roberts", movies: ['Pretty Woman', 'Runaway Bride', 'Erin Brockovich'] });
    

    우리는 액터 문서의 각 영화를 통해 반복 할 필요가 개별적으로 각 동영상을 방출한다.

    여기 캐치는 감소 단계에있다. (가) 단계를 줄일에서 우리가 반환되는 "값"문서의 배우 배열의 내부를 구축해야한다, 그래서 우리는 배열을 방출 할 수 없습니다.

    map = function() {
      for(var i in this.movies){
        key = { movie: this.movies[i] };
        value = { actors: [ this.actor ] };
        emit(key, value);
      }
    }
    
    reduce = function(key, values) {
      actor_list = { actors: [] };
      for(var i in values) {
        actor_list.actors = values[i].actors.concat(actor_list.actors);
      }
      return actor_list;
    }
    

    actor_list가 실제로 배열을 포함하는 자바 스크립트 객체 어떻게 알 수 있습니다. 또한이지도는 동일한 구조를 방출 확인할 수 있습니다.

    은 "피벗"컬렉션에, 맵이 축소 / 실행 출력을 다음을 실행하고 결과를 인쇄 :

    printjson (db.actors.mapReduce (지도), "피벗"을 감소);   db.pivot.find () 대해 forEach (printjson).;

    여기에 "예쁜 여자"와 "도망자 신부는"모두 "리처드 기어"와 "줄리아 로버츠"을 가지고 샘플 출력, 노트입니다.

    { "_id" : { "movie" : "Chicago" }, "value" : { "actors" : [ "Richard Gere" ] } }
    { "_id" : { "movie" : "Erin Brockovich" }, "value" : { "actors" : [ "Julia Roberts" ] } }
    { "_id" : { "movie" : "Pretty Woman" }, "value" : { "actors" : [ "Richard Gere", "Julia Roberts" ] } }
    { "_id" : { "movie" : "Runaway Bride" }, "value" : { "actors" : [ "Richard Gere", "Julia Roberts" ] } }
    
  19. ==============================

    19.우리는 MongoDB의 하위 쿼리를 사용하여 두 모음을 병합 할 수 있습니다. 다음 예는, 코멘트--

    우리는 MongoDB의 하위 쿼리를 사용하여 두 모음을 병합 할 수 있습니다. 다음 예는, 코멘트--

    `db.commentss.insert([
      { uid:12345, pid:444, comment:"blah" },
      { uid:12345, pid:888, comment:"asdf" },
      { uid:99999, pid:444, comment:"qwer" }])`
    

    Users--

    db.userss.insert([
      { uid:12345, name:"john" },
      { uid:99999, name:"mia"  }])
    

    JOIN--에 대한 MongoDB의 서브 쿼리

    `db.commentss.find().forEach(
        function (newComments) {
            newComments.userss = db.userss.find( { "uid": newComments.uid } ).toArray();
            db.newCommentUsers.insert(newComments);
        }
    );`
    

    새로 생성에서 결과를 얻을 Collection--

    db.newCommentUsers.find().pretty()
    

    결과--

    `{
        "_id" : ObjectId("5511236e29709afa03f226ef"),
        "uid" : 12345,
        "pid" : 444,
        "comment" : "blah",
        "userss" : [
            {
                "_id" : ObjectId("5511238129709afa03f226f2"),
                "uid" : 12345,
                "name" : "john"
            }
        ]
    }
    {
        "_id" : ObjectId("5511236e29709afa03f226f0"),
        "uid" : 12345,
        "pid" : 888,
        "comment" : "asdf",
        "userss" : [
            {
                "_id" : ObjectId("5511238129709afa03f226f2"),
                "uid" : 12345,
                "name" : "john"
            }
        ]
    }
    {
        "_id" : ObjectId("5511236e29709afa03f226f1"),
        "uid" : 99999,
        "pid" : 444,
        "comment" : "qwer",
        "userss" : [
            {
                "_id" : ObjectId("5511238129709afa03f226f3"),
                "uid" : 99999,
                "name" : "mia"
            }
        ]
    }`
    

    이 도움이 될 수 있도록 노력하겠습니다.

  20. from https://stackoverflow.com/questions/2350495/how-do-i-perform-the-sql-join-equivalent-in-mongodb by cc-by-sa and MIT license