express与MongoDB交互

2016-10-4    分类: mongoDB,nodejs笔记

MongoDB服务器端安装配置好后,就要与客户端交互,例如php操作mongodb、express操作mongodb,等等。

这里主要介绍express与mongodb交互。假设已经安装好express和node.js,剩下就安装node.js下的mongodb客户端模块。

 

1,首先安装mongodb客户端

npm install mongodb

 

2,安装好mongodb模块后,开始调用,如:

var MongoClient = require('mongodb').MongoClient;
var DB_CONN_STR = 'mongodb://xgllseo:123@localhost:27017/xgllseo';  //开启auth时使用,就是不需要帐号密码
mongodb://帐号:密码@IP地址:端口/数据库

var DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1';  //如果没设置密码就使用

现在已经可以使用express操作mongodb数据库了

 

MongoClient.connect(DB_CONN_STR, function(err1, db) {
  if(err1){
       console.log('连接数据库失败');
  }else{
       db.collection('xx22').insert([{"name":'wilson001',"age":21}],function (err2, result) {
          if(err2){
              console.log('插入数据失败');
          }else{
              console.log(result); //显示插入成功后的数据
              db.close();
          }
       });
  }
});

 

//查找到{"name":'wilson002'}数据后,就删除此条数据
MongoClient.connect(DB_CONN_STR, function(err1, db) {
   if(err1){
       console.log('连接数据库失败');
   }else{
       db.collection('xx').remove({"name":'wilson002'},function (err2,result) {
           if(err2){
                console.log('删除数据失败');
           }else{
                console.log('删除数据成功');
           }
       });
    }
});

 

//先查找{"name":'wilson001'}有没有数据,如果有就修改数据为{ "name" : "修改后" }
MongoClient.connect(DB_CONN_STR, function(err1, db) {
   if(err1){
       console.log('连接数据库失败');
   }else{
       db.collection('xx').update({"name":'wilson001'},{$set:{ "name" : "修改后" }},function (err2, result) {
          if(err2){

          }else{
             console.log(result)
          }
       });
   }
});

 

//在xx集合中查找age=22的那条数据
MongoClient.connect(DB_CONN_STR, function(err1, db) {
   if(err1){
      console.log('连接数据库失败');
   }else{
      db.collection('xx').find({age:22}).toArray(function (err2,result) {
         if(err2){
            console.log('插入数据失败');
         }else{
            console.log(result);
         }
      });
    }
});

 

可直接执行mongodb语句(这里要注意操作数据库的所拥有的权限)

MongoClient.connect(DB_CONN_STR, function(err1, db) {
   if(err1){
      console.log('连接数据库失败');
   }else{
      /*-----------------------id自动递增函数---------------------------------*/
        // 要使用此功能时,要添加一个额外的集合,如下
        // db.createCollection("counters")
        // db.counters.insert({_id:"productid",sequence_value:0})
        var str=undefined;
        str=function() {
              function getNextSequenceValue(sequenceName){
                var sequenceDocument = db.counters.findAndModify(
                      {
                        query:{_id: sequenceName },
                        update: {$inc:{sequence_value:1}},
                        new:true
                });
                return sequenceDocument.sequence_value;
               }
               db.xx22.insert({
                  "_id":getNextSequenceValue("productid"),
                  "product_name":"内容111",
                  "category":"内容222"
               })
         }+'';
      /*--------------------------------------------------------*/
     db.eval(str,function (err2,result) {
         if(err2){
             console.log('失败');
         }else{
             console.log('成功');
          }
     })
  }
});


提示:如果要拥有执行eval的权限,就不要设置密码,要么就执行以下步骤:
在未开启密码验证的时候登录mongo界面,执行以下代码:
use admin 
db.createUser({user:"root",pwd:"187", roles:[{role:"root",db:"admin"}]})
db.createRole({role:'sysadmin',roles:[],privileges:[{resource:{anyResource:true},actions:['anyAction']}]}) 

use xgllseo
db.createUser({user:'xgllseo',pwd:'123',roles:[{role:'sysadmin',db:'admin'}]}) 
之后开启auth验证
登录数据库xgllseo就拥有执行eval权限了

 

 

auto递增(一般配合eval使用)

mongodb不像mysql其他关系数据库一样,每增加一条数据后就会递增累计加1,以后可以靠id获取数据。

mongodb想添加这个功能有点麻烦,如果想为哪个集合添加递增的功能,就要为此集合额外创建一个新的专门存储递增的集合。

 

假如:有一个xx22的集合想为这个集合添加自动递增的功能,首先创建一个新的集合,如:

1,db.createCollection("集合名")
2,db.集合名.insert({_id:"productid",sequence_value:0})
3,
function getNextSequenceValue(sequenceName){
   var sequenceDocument = db.集合名.findAndModify(
      {
         query:{_id: sequenceName },
         update: {$inc:{sequence_value:1}},
         new:true
       }
    );
   return sequenceDocument.sequence_value;
}
4, //测试,不停的往xx22中添加数据,xx22集合的_id就不停的递增加1
db.xx22.insert({
  "_id":getNextSequenceValue("productid"),
  "product_name":"内容111",
  "category":"内容222"
})

(为了一个集合添加递增功能还要额外创建一个新的集合感觉集合有点冗余)

 

参考:《mongodb笔记的常用操作