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);
        });
    });
原文地址:https://www.cnblogs.com/Fredric-2013/p/4417960.html