mongodb 實現join

來源:互聯網
上載者:User

標籤:

mongodb提供ref和populate的方法,支援類似join的SQL操作。本文給出一個實際的例子:

1. 資料1:

var daob = new Schema({    user: {        type: String    },    title: {        type: String    },    tag: [{        type: String    }],    content: {        type: String    },    count: {        type: Number,        ‘default‘:0    }});

2. 資料2:

var daoa = new Schema({    name: {        type: String    },    time: {        type: Date    },    conments: [{        type: mongoose.Schema.ObjectId, //這裡儲存daob的id,mongo中只能使用collection的_id        ref: ‘daob‘    }]});

3. 插入操作:

var b = new daobmodel({        user: ‘fredric‘,        title: ‘title1‘,        tag: [‘tag1‘, ‘tag2‘, ‘tag3‘],        content: ‘nothing to say, just test‘,    });    b.save(function(err) {        var a = new daoamodel({            name: ‘sinny‘,            time: new Date(),            conments: [b._id]        });        a.save(function(err) {            return callback(err);        })    });

4. 尋找操作:

mongo不支援真正意義上的join操作,因此本例中的需求只能分拆成兩步

//這裡可以採用彙總來實現比較複雜的查詢    daobmodel.find({        ‘tag‘: {            $in: [‘tag1‘]        }    }, {        _id: 1    }, function(err, ids) {        daoamodel.find({            conments: {                $in: ids            }        }).populate(‘conments‘).exec(function(err, docs) {            return callback(err, docs);        });    });

mongodb 實現join

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.