zoukankan      html  css  js  c++  java
  • 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);
            });
        });
  • 相关阅读:
    spring mvc + kafka实战
    springboot 实现文件下载功能
    vue前端文件下载
    父类和子类初始化顺序
    几种单例模式
    全链路压测注意点
    压力测试-ab
    压力测试-locust讲解
    Java httpClient 中get, post ,put(form-data & raw), delete方法使用
    RequestBody 和RequestEntity使用
  • 原文地址:https://www.cnblogs.com/Fredric-2013/p/4417960.html
Copyright © 2011-2022 走看看