资讯专栏INFORMATION COLUMN

NodeJs 使用 Mongodb

Keagan / 1552人阅读

摘要:之前我们学习了的命令,现在我们再一个小小的项目中使用一下吧我们先来初始化一个项目第一步全局安装第二步初始化一个项目第三步第四步启动然后在浏览器中打开网址就可以看到这个应用了。

之前我们学习了Mongodb 的Shell命令, 现在我们再一个小小的node项目中使用一下mongodb吧
我们先来初始化一个express项目

第一步

$ npm install express-generator -g
// 全局安装

第二步

$ express testmongodb
// 初始化一个项目

第三步

$ cd testmongodb
$ cnpm install

第四步

// 启动
$ npm start

然后在浏览器中打开 http://localhost:3000/ 网址就可以看到这个应用了。
更改目录结构
| bin
| modle
    - db.js
| config
    - config.js
| views
| public
| routes
    - index.js
| app.js
| package.json
完善代码阶段
$ cnpm install mongodb ---save
// 安装mongodb
// config.js
var baseUrl = "mongodb://localhost:27017";
var dbbase = "/mongodb_demo"; // 这里是我的数据库名称哦
module.exports = {
  "dburl": baseUrl + dbbase
};
// db.js
/**
 *  数据库封装
 * 
 */

var MongodbClient = require("mongodb").MongoClient
var assert = require("assert")
var config = require("../config/config.js")

/**
 * 连接数据库
 */

function __connectDB(callback) {
  MongodbClient.connect(config.dburl, function (err, db) {
    callback(err, db)
  })
}


/**
 * 插入一条数据
 * @param {*} collectionName 集合名
 * @param {*} Datajson 写入的json数据
 * @param {*} callback 回调函数
 */
function __insertOne(collectionName, Datajson, callback) {
  __connectDB(function (err, db) {
    var collection = db.collection(collectionName);
    collection.insertOne(Datajson, function (err, result) {
      callback(err, result); // 通过回调函数上传数据
      db.close();
    })
  })
}

/**
 * 查找数据
 * @param {*} collectionName 集合名
 * @param {*} Datajson 查询条件
 * @param {*} callback 回调函数
 */

function __find(collectionName, JsonObj, callback) {
  var result = [];
  if (arguments.length != 3) {
    callback("find函数必须传入三个参数哦", null)
    return
  }
  __connectDB(function (err, db) {
    var cursor = db.collection(collectionName).find(JsonObj);
    if (!err) {
      cursor.each(function (err, doc) {
        assert.equal(err, null) // 使用node的assert模块来判断是否出错了
        // 如果出错了,那么下面的也将不会执行了
        if (doc != null) {
          result.push(doc)
        } else {
          callback(null, result)
          db.close();
        }
      })
    }
  })
}

/**
 * 
 * 删除数据(删除满足条件的所有数据哦)
 * @param {*} collectionName 集合名
 * @param {*} json 查询的json数据
 * @param {*} callback 回调函数
 */

function __DeleteMany(collectionName, json, callback) {
  __connectDB(function (err, db) {
    assert.equal(err, null)
    //删除
    db.collection(collectionName).deleteMany(
      json,
      function (err, results) {
        assert.equal(err, null)
        callback(err, results);
        db.close(); //关闭数据库
      }
    );
  });
}


/**
 * 修改数据
 * @param {*} collectionName 集合名
 * @param {*} json1 查询的对象
 * @param {*} json2 修改
 * @param {*} callback 回调函数
 */

function __updateMany(collectionName, json1, json2, callback) {
  __connectDB(function (err, db) {
    assert.equal(err, null)
    db.collection(collectionName).updateMany(
      json1,
      json2,
      function (err, results) {
        assert.equal(err, null)
        callback(err, results)
        db.close()
      }
    )
  })
}


/**
 * 获取总数
 * @param {*} collectionName 集合名
 * @param {*} json 查询条件
 * @param {*} callback 回调函数
 */

function __getCount(collectionName, json, callback) {
  __connectDB(function (err, db) {
    db.collection(collectionName).count(json).then(function (count) {
      callback(count)
      db.close();
    })
  })
}


/**
 * 分页查找数据
 * @param {*} collectionName 集合名
 * @param {*} JsonObj 查询条件
 * @param {*} C 【可选】传入的参数,每页的个数、显示第几页
 * @param {*} C  callback
 */

function __findByPage(collectionName, JsonObj, C, D) {
  var result = []; //结果数组
  if (arguments.length == 3) {
      //那么参数C就是callback,参数D没有传。
      var callback = C;
      var skipnumber = 0;
      //数目限制
      var limit = 0;
  } else if (arguments.length == 4) {
      var callback = D;
      var args = C;
      //应该省略的条数
      var skipnumber = args.pageamount * args.page || 0;
      //数目限制
      var limit = args.pageamount || 0;
      //排序方式
      var sort = args.sort || {};
  } else {
      throw new Error("find函数的参数个数,必须是3个,或者4个。");
      return;
  }

  //连接数据库,连接之后查找所有
  __connectDB(function (err, db) {
      var cursor = db.collection(collectionName).find(JsonObj).skip(skipnumber).limit(limit).sort(sort);
      cursor.each(function (err, doc) {
          if (err) {
              callback(err, null);
              db.close(); //关闭数据库
              return;
          }
          if (doc != null) {
              result.push(doc); //放入结果数组
          } else {
              //遍历结束,没有更多的文档了
              callback(null, result);
              db.close(); //关闭数据库
          }
      });
  });
}


module.exports = {
  __connectDB,
  __insertOne,
  __find,
  __DeleteMany,
  __updateMany,
  __getCount,
  __findByPage
}
// db.js 文件是数据库操作的DAO 层的封装
//app.js

var createError = require("http-errors");
var express = require("express");
var path = require("path");
var cookieParser = require("cookie-parser");
var logger = require("morgan");

var indexRouter = require("./routes/index");
var usersRouter = require("./routes/users");
// 修改【1】 
global.db = require("./modle/db.js")    // 引入数据库封装好的 DAO 层方法 
var app = express();

// view engine setup
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "jade");

app.use(logger("dev"));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, "public")));

// 修改【2】 这里配置我们的路由
app.use("/", indexRouter)
app.use("/users", usersRouter)
app.use("/testconnect", indexRouter)
app.use("/testdeletemany", indexRouter)
app.use("/testupdatemany", indexRouter)
app.use("/count", indexRouter)
app.use("/testfingbypage", indexRouter)


// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get("env") === "development" ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render("error");
});

module.exports = app;
// index.js
// 这里用来配置路由操作
var express = require("express");
var router = express.Router();

/* GET home page. */
router.get("/", function (req, res, next) {
  res.render("index", { title: "Express" });
});

// 测试数据库连接
router.get("/testconnect", function (req, res) {
  global.db.__connectDB(function (err, db) {
    if (err) {
      console.log(err)
      return
    }
    console.log(db)
    res.render("index", { title: "连接数据库成功" })
  })
})

// 测试插入数据
router.get("/testinsert", function (req, res) {
  global.db.__insertOne("student", {
    "name": "zjj",
    "age": 33,
    "interests": ["play"],
    "sex": "男"
  }, function (err, result) {
    if (!err) {
      console.log(result)
      res.render("index", { title: "插入一条数据成功" })
    } else {
      console.log(err)
    }
  })
})

// 查找数据
router.get("/testfind", function (req, res) {
  global.db.__find("student", { age: { $lt: 30 } }, function (err, result) {
    if (!err) {
      console.log(result)
      res.render("index", { title: "查询成功" })
    } else {
      console.log(err)
    }
  })
})

// 删除数据(删除符合条件的全部数据哦)
router.get("/testdeletemany", function (req, res) {
  global.db.__DeleteMany("student", { "age": { $gte: 19 } }, function (err, result) {
    if (!err) {
      console.log(result)
      res.render("index", { title: "删除成功" })
    } else {
      console.log(err)
    }
  })
})

// 修改数据(满足条件的数据全部都会被修改)

router.get("/testupdatemany", function (req, res) {
  global.db.__updateMany(
    "student",
    {
      "name": "zjj"
    },
    {
      $set: { name: "cnm" }
    },
    function (err, result) {
      if (!err) {
        console.log(result)
        res.render("index", {
          title: "修改成功"
        })
      }
    }
  )
})


// 统计总数
router.get("/count", function (req, res) {
  global.db.__getCount("student", {}, function (count) {
    console.log(count)
    res.render("index", {
      title: `一共${count}条数据`
    })
  })
})


// 分页显示
// page是页数,从 0 开始
router.get("/testfingbypage", function (req, res) {
  global.db.__findByPage("student", {}, {
    "pageamount": 6,
    "page": 0
  }, function (err, result) {
    if (err) {
      throw err;
    }
    res.send(result);
    console.log(result.length);
  })
})

module.exports = router;

启动一次

$ npm start

打开localhost:3000测试一下路由吧,再看看自己数据库中是否进行了相关操作了呢~

感谢支持!!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/19215.html

相关文章

  • 在腾讯云服务器上配置nodejs项目环境 CentOS6.5

    摘要:我把代码上传到了目录文件夹下。而当你用时,这个的启动并不是账号,一般是账号,因而自然访问不了一些的文件和文件夹了。解决方法直接把该文件删除掉用用户启动就行了。设置开机启动在中添加之后重启 项目演示地址:http://115.159.155.118:3002/ 在腾讯云服务器上配置nodejs环境 CentOS6.5 一、配置服务器环境 1.用xshell登录服务器2.把yum更新到最新...

    yuanzhanghu 评论0 收藏0
  • 在腾讯云服务器上配置nodejs项目环境 CentOS6.5

    摘要:我把代码上传到了目录文件夹下。而当你用时,这个的启动并不是账号,一般是账号,因而自然访问不了一些的文件和文件夹了。解决方法直接把该文件删除掉用用户启动就行了。设置开机启动在中添加之后重启 项目演示地址:http://115.159.155.118:3002/ 在腾讯云服务器上配置nodejs环境 CentOS6.5 一、配置服务器环境 1.用xshell登录服务器2.把yum更新到最新...

    xiyang 评论0 收藏0
  • 基于nodejsmongodb的数据实时同步到elasticsearch

    摘要:一前言因公司需要选用做全文检索,持久化存储选用的是,但是希望里面的数据发生改变可以实时同步到上,一开始主要使用的版本,可以搞定这个问题。或者修改中的某一条数据,也会实时同步到中。如何把的主文档和附件信息都同步到中利用的来实现。 一、前言 因公司需要选用elasticsearch做全文检索,持久化存储选用的是mongodb,但是希望mongodb里面的数据发生改变可以实时同步到elast...

    miya 评论0 收藏0
  • nodejs+mongodb构建一个简单登录注册功能

    摘要:搭建简单登录注册还是我又来了近来突然对数据库和后台有点感兴趣就开始了漫长的学习之路想想自己只是一个前端只会斯科瑞普所以就开始看看着看着突然发现和更配哦遂就开了我的之路由于我的表达能力有限下面的文章可能写的不是那么详细有看不懂的可以去我上看源 nodejs+mongodb搭建简单登录注册 biu!biu!biu!还是我又来了!!! 近来突然对数据库和后台有点感兴趣,就开始了漫长的学习之...

    yibinnn 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<