首页 > 代码库 > node13---node使用mongodb

node13---node使用mongodb

01.js

/**
 *最先的后台语言是Asp(微软的),
 */
var express = require("express");
//数据库引用
var MongoClient = require(‘mongodb‘).MongoClient;
var assert = require(‘assert‘);//调试用的:assert.equal(null,err);出错停止执行下面语句

var app = express();

//数据库连接的地址,最后的斜杠表示数据库名字,数据库不存在会创建
var shujukuURL = ‘mongodb://localhost:27017/itcast‘;

app.get("/",function(req,res){
    //连接数据库,这是一个异步的操作
    MongoClient.connect(shujukuURL, function(err, db) {
        if(err){
            res.send("数据库连接失败");
            return;
        }
        res.write("恭喜,数据库已经成功连接 \n");
        db.collection("teacher").insertOne({"name":"哈哈"},function(err,result){
            if(err){
                res.send("数据库写入失败");
                return;
            }
            res.write("恭喜,数据已经成功插入");
            res.end();
            //关闭数据库
            db.close();
        });
    });
});

app.listen(3000);

02.js

/**
 * Created by Danny on 2015/9/23 17:24.
 */
var express = require("express");
var MongoClient = require(‘mongodb‘).MongoClient;
var assert = require(‘assert‘);

var app = express();

app.set("view engine","ejs");

//数据库连接的地址,最后的斜杠表示数据库名字
var shujukuURL = ‘mongodb://localhost:27017/itcast‘;

app.get("/",function(req,res){
    //先连接数据库,对数据库的所有操作,都要写在他的回调函数里面。
    MongoClient.connect(shujukuURL, function(err, db) {
        if(err){
            //res.write("数据库连接失败");
            return;
        }
        //res.write("恭喜,数据库已经成功连接 \n");
        //查询数据库,cursor游标,游标可以用each方法遍历
        //每次表示一条document
        var result = [];
        var cursor = db.collection(‘teacher‘).find( );
        cursor.each(function(err, doc) {
            if(err){
                //res.write("游标遍历错误");
                return;
            }
            if (doc != null) {
                result.push(doc);
            } else {
                //console.log(result);
                //遍历完毕
                db.close();
                res.render("index",{
                    "result" : result
                });
            }
        });
    });
});

app.get("/add",function(req,res){
    res.render("add");//add页面
});

app.get("/tijiao",function(req,res){

    //得到参数
    var name = req.query.name;
    var age = req.query.age;
    var yuwenchengji = req.query.yuwenchengji;
    var shuxuechengji = req.query.shuxuechengji;

    MongoClient.connect(shujukuURL, function(err, db) {
        if(err){
            console.log("数据库连接失败");
            return;
        }

        db.collection("teacher").insertOne({
            "name" : name,
            "age" : age,
            "score" : {
                "shuxue" : shuxuechengji,
                "yuwen" : yuwenchengji
            }
        },function(err,result){
            if(err){
                console.log("数据库写入失败");
                return;
            }
            res.send("恭喜,数据已经成功插入");
            res.end();
            //关闭数据库
            db.close();
        });
    });
});

app.listen(3000);

03.js

var express = require("express");
var app = express();
var MongoClient = require(‘mongodb‘).MongoClient;


app.get("/",function(req,res){
    //url就是数据库的地址。/表示数据库
    //假如数据库不存在,没有关系,程序会帮你自动创建一个数据库
    var url = ‘mongodb://localhost:27017/haha‘;
    //连接数据库,每个用户请求来就打开数据库最后又关闭数据库(php也是每次打开数据库后关闭数据库)
    MongoClient.connect(url, function(err, db) {
        //回调函数表示连接成功做的事情,db参数就是连接上的数据库实体
        if(err){
            console.log("数据库连接失败");
            return;
        }
        console.log("数据库连接成功");
        //插入数据,集合如果不存在,也没有关系,程序会帮你创建
        db.collection(‘student‘).insertOne({//生成的id前几位是时间戳后面是机器码,全球唯一
            "name" : "哈哈",
            "age" : parseInt(Math.random() * 100 + 10)
        }, function(err, result) {
            if(err){
                console.log("插入失败");
                return;
            }
            //插入之后做的事情,result表示插入结果。
            //console.log(result);
            res.send(result);
            db.close();
        });
    });
});

app.listen(3000);

 分页:

一、数据库
分页,想想我们的百度百家Ajax案例,当时调用了百度的JSON,有一个参数叫做page=3,生成的JSON不一样。
这个就是分页,就是我们想寻找所有的新闻,但是是位于第3页的新闻。那么有两种做法:
1) 错误的做法: 就是讲所有的result都读取到数组,然后进行数据操作,进行分页;
2) 正确的做法: 就是真的在数据库中,只读取这么多内容。

错误的,我们试图每次都读取全部数据,但是这样开销很大。
1    var a = [];
2    db.find("student",{},function(err,result){
3        for(var i = 10 * page ; i < 10 * (page + 1) ; i++){
4            a.push(result[i]);
5        }
6        res.send(a);
7    });

所以,mongodb提供了傻傻的两个函数。
limit():读取的条数, skip():跳过多少条
加入,第一页是page=0。每页10条,所以当前页的查询语句
1db.student.find({}).limit(10).skip(page*10)
数据总数怎么得到?
shell中
1db.student.stats().count;

 

node13---node使用mongodb