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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值