mongodb( 实现join)

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)