MongoDB:关于node操作mongodb的小小事

Mongodb是nosql中的翘楚,所以我的毕设就赶了一把潮流,用mongodb狠狠的在到是面前装了一下。结果结果导师说你这抄的太明显了 ╮(╯_╰)╭。
  由于mongodb中无主键概念,所有记录其都给生成 _id为唯一标示,集合取代了表。刚开始我还是用mysql思维去思考结果被项目组长训斥说不能快速接受新鲜事物。
  既然没了主键概念那外键也不幸免,没了外键与主键(其实mongo也有一些方法来实现这些sql特性)对于俩张表以上的联合操作,在当时真的让我很无奈。且node是异步稍不注意,代码就成了回调深渊,要多深有多深。。。
  不过对于node中的异步操作有多种方式解决,导包、promise等,promise大家可以根据简书上的教程去学习,语言简练且不缺乏段子,总之你看了会受益匪浅。在这里我给大家推荐async包,具体实例大家可以去github上根据demo练习
  我只贴出我所用到的map流:

mongoClient.connect(setting.dbInfo, function (err, db) {  
        var teacher = db.collection('teacher');  
        teacher.find({course:{$exists:true}}).toArray(function (err, teacherDoc) {  
            if (err) {  
                console.log('error if ------>')  
                res.status('500');  
                res.json({  
                    result: 'ERROR_1',  
                    resson: '#_1 System error! '  
                });  
            }  
            if (teacherDoc.length > 0) {  
                res.status('200');  
                async.map(teacherDoc, function (itemT, callbackT) {  
                    async.map(itemT.course, function (itemC, callbackC) {  
                        var course = db.collection('course');  
                        course.find({'name': itemC}).toArray(function (err, courseDoc) {  
                            if (err) {  
                                callbackC(err, null)  
                            } else {  
                                courseDoc[0].teacherName = itemT.name;  
                                courseDoc[0].teacherTel = itemT.tel_phone;  
                                courseDoc[0].teacherEdu = itemT.edu_level;  
                                courseDoc[0].teacherSex = itemT.sex;  
                                courseDoc[0].teacherAge = itemT.age;  
                                callbackC(null, courseDoc[0]);  
                            }  
                        });  
                    }, function (errc, resultC) {  
                        if (errc) {  
                            console.log(errc);  
                        } else {  
                            callbackT(null, resultC)  
                        }  
                    })  
                }, function (errr, resultT) {  
                    if (errr) {  
                        console.log(errr);  
                    } else {  
                        res.json({  
                            result: 'OK',  
                            teaAll: _.flatten(resultT)  
                        });  
                        db.close();  
                    }  
                });  
            } else {  
                res.status('200');  
                res.json({  
                    result: 'ERROR_2',  
                    resson: '#_2 Not exit!'  
                })  
            }  
        });  
    }); 

这里只是抛砖引玉,给初学者提供一个思路,大家还是多研究下官方api,照着api学习是极好的。

官方地址:async

    原文作者:LazyGeorge
    原文地址: https://www.jianshu.com/p/5bb02f7d8608
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞