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);
            });
        });
  • 相关阅读:
    Leetcode Power of Two
    Leetcode Reverse Integer
    Leetcode Add Digits
    Leetcode Roman to Integer
    Python 函数的定义语法
    Python 函数的三种定义方式
    Python 函数的定义与调用
    Python 函数分类
    Python 为什么要使用函数
    Python 文件的二进制读写
  • 原文地址:https://www.cnblogs.com/Fredric-2013/p/4417960.html
Copyright © 2011-2022 走看看