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);
        });
    });
复制代码
posted @   Fredric_2013  阅读(4810)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示