zoukankan      html  css  js  c++  java
  • Node.js与MongoDB的合作

    //从现在开始,我们要学习的就是关于Node.js与mongoDB的联合
    首先我们要做的就是在node环境里面下载mongodb 顺便安装上依赖
    1、首先要做的就是进入项目
    >>d:
    >>cd D:DocumentsHBuilderProject odejsmongoNode
    2、然后安装
    cnpm install mongodb --save
    3、创建一个文件 比如名字叫sqltest.js,并在里面引入mongodb的客户端
    var MongoClient = require('mongodb').MongoClient;
    4、找到数据库(这里要注意,我们以前用的是http协议或者是https协议,这里是mongodb协议)
    var DB_CONN_STR = 'mongodb://localhost:27017/movies';
    5、连接数据库
    MongoClient.connect(DB_CONN_STR, function(err, db) {
    if(err){
    console.log(err)
    }else{
    console.log('数据库连接成功!')
    }
    })
    这里要注意一下,如果这里先把mongoDB的两个命令窗口给关了,这里再运行node sqltest.js的时候,就会报错,提示我们没有连上localhost:27017!
    6、接着连接成功之后就像要想证删改查啦! 【这里注意一下,除了find查询数据外,其他三个方法都有回调函数。只有find需要先toArray】
    因为我们的函数里面已经有db的参数了,所以我们先打印一下db
    MongoClient.connect(DB_CONN_STR, function(err, db) {
    if(err){
    console.log(err)
    }else{
    console.log('数据库连接成功!')
    console.log(db);
    }
    })
    会的出来一堆的数据,包括数据库什么的~
    这个时候,我们要连接数据库的其中一张表: var collection = db.collection('list');
    //这里必须记录一下了!当我使用console.log(db.collection('list'));的时候,命令窗口一直显示的是db.collection is not a function
    后来查了一下说是版本的原因,然后我就去mongoNode下面的package.json里面,把原来的
    {
    "dependencies": {
    "mongodb": "^^2.2.33"
    }
    }
    改为了
    {
    "dependencies": {
    "mongodb": "^2.2.33"
    }
    }
    竟然就成功了!也是醉了···神坑呀神坑!
    出来之后应该是这样子的:
    Collection {
    //s:这里都省略
    }
    上面的Collection就恰恰说明了已经成功!

    6.1:增加数据>还是原来的配方,还是熟悉的味道,依然是我们的insert。
    1)增一条数据
    insertData:function(db,collectionName,data){//这里的data为对象
    db.collection(collectionName).insert(data,function(err,result){
    if(err){
    console.log(err)
    }else{
    console.log('ok!');
    }
    })
    }
    var data = {"name":"菜鸟教程","url":"www.runoob.com"},{"name":"菜鸟工具","url":"c.runoob.com"};
    collection.insert(data);
    2)增加多条,这个就简单啦
    var data = [{"name":"菜鸟教程","url":"www.runoob.com"},{"name":"菜鸟工具","url":"c.runoob.com"}];
    collection.insertMany(data,function(){err,result});
    3)模块化开发
    就是将函数全部封装在MySql.js里面,然后进行暴露:module.exports = MySql,然后在sql.js里面引入:var MySql = require('./MySql.js');
    然后就可以直接执行啦!
    这里要注意,我们的函数中的那个MySql.insertData(db,'list',data)的list,有则插入,无责自己生成后插入。

    6.2:查询数据 toArray
    findData:function(db,collectionName,searchObj,showObj){
    db.collection(collectionName).find(searchObj,showObj).toArray(function(err, result) {
    if(err){
    console.log('Error:'+ err);
    }else{
    console.log(result);
    }
    });
    }
    结果是:
    [ { title: '肖申克的救赎' },
    ····//中间的省略
    { title: '肖申克的救赎' } ]

    6.3:更新数据
    1)更新一条
    updateData:function(db,collectionName,whereObj,updateObj){
    db.collection(collectionName).update(whereObj,updateObj,function(err,result){
    if(err){
    console.log('Error:'+ err);
    }else{
    console.log(result);
    }
    })
    }
    MySql.updateData(db,'list',{year:'1994'},{$set:{year:'1000'}});
    2)更新多条
    MySql.updateManyData(db,'list',{year:'1994'},{$set:{year:'1000'}});
    由此可以看出,对于更新来讲,一个和多个其实函数是一样的,就看你调用的时候怎么写了
    一般来讲,更新多条不是在里面写一个数组,而是一个判断条件!
    db.list.updateMany({year:{$lt:'1995'}},{$set:{year:'1000'}})

    6.4:删除数据
    1)删除一条
    deleteData:function(db,collectionName,deleteObj){
    db.collection(collectionName).deleteOne(deleteObj,function(err,result){
    if(err){
    console.log(err)
    }else{
    console.log('delete ok!');
    }
    })
    }
    MySql.deleteData(db,'list',{title:'肖声克的救赎'});
    2)删除多条
    MySql.deleteManyData(db,'list',{title:'肖声克的救赎'});
    这个和更新是一样的

    但是我们要考虑到一个问题,这个console.log是不能写唯一的,所以我们要有一个回调函数!callback
    //查询数据
    findData:function(db,collectionName,searchObj,showObj,callback){
    db.collection(collectionName).find(searchObj,showObj).toArray(function(err, result) {
    if(err){
    console.log('Error:'+ err);
    // return;
    }else{
    // console.log(result);
    callback(result);
    }
    });
    }
    MySql.findData(db,'list',{},{title:1,'_id':0},function(result){
    console.log(result)
    });

    接下来我们就要学习写页面了!

  • 相关阅读:
    Redis
    Redis
    Redis
    Redis
    Redis
    Redis
    Distributed
    Sentinel
    Archi
    Redis
  • 原文地址:https://www.cnblogs.com/yimei/p/8024275.html
Copyright © 2011-2022 走看看