mongoose中如何进行联合查询?

发布于 2022-09-06 03:00:05 字数 1379 浏览 13 评论 0

原来单表查询代码为

exports.getInformation = function(req,res){
    var params = req.query;
    var cond = {};
    console.log('getInformation----->',params);
    var skip = (params.current-1)* params.limit;
    // 留着给type分类用
    // if(params.search){
    //     cond = {$text:{$search:params.search}};
    // }
    async.series({
        count: function(callback){
            Information.find(cond).count(function(err,count){
                callback(err,count);
            });
        },
        data: function(callback){
            Information.find(cond,function(err,data){
                callback(err,data);

            }).limit(params.limit).skip(skip).sort({'DRUG_YPTM':-1});
        }
    },function(err, results){
        console.log('results----->',results);
        if(err){
            return res.status(500).json({success : false,err : err});
        }
        if(results.data){
            const _data = transData.run(ConfigFile.info_output, results.data);
            return res.status(200).json({success : true, data : _data, columns : ConfigFile.info_columns,total: results.count});
        }else{
            return res.status(200).json({success : false});
        }
    });
};

现在要先到information_state表中,查询一下消息是否被删除(INFO_DELETE是否为1,俩表中 INFO_ID相同),应该如何改造查询语句?

或者说 有什么mongoose的方法,可以进行多表查询的?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

无声无音无过去 2022-09-13 03:00:05

如果是简单的关联查询,在非Shard的环境下,可以考虑使用aggregate下的$lookup,让开发简单一些。

https://docs.mongodb.com/mast...

供参考。

Love MongoDB! Have Fun!

可是我不能没有你 2022-09-13 03:00:05

自己用async.waterfall实现了一个, 可能不是正规的写法,但是能实现功能。

exports.getInformation = function(req,res){
    var params = req.query;
    var cond = {};
    console.log('getInformation----->',params);
    var skip = (params.current-1)* params.limit;
    // 留着给type分类用
    // if(params.search){
    //     cond = {$text:{$search:params.search}};
    // }

    // async.waterfall 查询结果能传到下一个callback中
    async.waterfall([
        // 先查询InformationState表中的 未被删除的 信息
        function(callback){
            InformationState.find({LOGIN_NAME: params.login_name, "INFO_DELETE": "0"},{"INFO_ID": 1, _id: 0}, function(err, ids){
                callback(err, ids);
            })
        },
        // 拿到用户所对应的消息id_list, 再去Information中查找
        function(ids, callback){
            var id_list = [];
            for(var i=0; i< ids.length; i++){
                id_list.push(ids[i]['INFO_ID']);
            }
            Information.find({INFO_ID: {$in: id_list}}, function(err, data) {
                callback(err, {data: data, count: ids.length});
            }).limit(params.limit).skip(skip)
        },
    ], function (err, results) {
        console.log('results ----->', results);
        if(err){
            return res.status(500).json({success : false, err : err});
        }
        if(results.data){
            const _data = transData.run(ConfigFile.info_output, results.data);
            return res.status(200).json({success : true, data : _data, columns : ConfigFile.info_columns, total : results.count})
        }else{
            return res.status(200).json({success : false})
        }
    });
};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文