nodejs+mongodb小例子

作者: DouQing | 来源:发表于2017-04-11 11:57 被阅读0次
    学习是一个慢慢理解的过程,所以会不间断更新~

    上次学习mongodb还是上个暑假,现在已经忘的差不多了,等于从零开始学习了,而网上了纯粹的例子太少了,经过最近的学习,将自己从零开始学习的过程记录下来

    代码github地址:https://github.com/DQing/mongo-demo

    资源:
    ubuntu16.04
    mongodb
    Robomongo (mongodb可视化客户端,有ubuntu版本)

    现在假定上面的资源你都已经安装好了。


    连接mongodb

    #connect.js
    var mongoose = require("mongoose");   //需要提前使用npm安装mongodb
    
    var url = "mongodb://127.0.0.1:27017/mongo";   //mongo是我的数据库
    var db = mongoose.connect(url);                     //连接数据库
    
    db.connection.on("error", function (error) {
        console.log("数据库连接失败:" + error);
    });
    db.connection.on("open", function () {
        console.log("数据库连接成功");
    });
    

    不出意外的话当你在终端运行node connect.js,会输出“数据库连接成功”,这就说明我们的数据库已经可以成功连接上了。

    创建数据库模型

    在连接上数据库后,我们就得考虑我们想在数据库中存取哪些数据,它们的结构是怎样,这就需要我们去构建数据库模型了,如下:

    #schema.js
    var mongoose = require('mongoose');
    var UserSchema = new mongoose.Schema({ //定义数据模型
        name: String,
        age: Number,
        sex: String
    });
    mongoose.model('User', UserSchema);//将该Schema发布为Model
    
    

    这一步就不需要在终端运行啦~

    测试

    现在我们就可以将前面定义的connect.js文件和schema.js联合起来进行测试

    #index.js
    var mongoose = require('mongoose');
    require('./connect.js');
    require('./schema.js');
    var User = mongoose.model('User');  //User为model name
    mongoose.Promise = global.Promise;  //为了避免警告的出现,因为mongoose的默认promise已经弃用了
    
    var user = new User({    
        name: 'douqing',
        age:18,
        sex:'女'
    });
    
    user.save(function (err) {
        console.log('save status:', err ? 'failed' : 'success');
    });
    

    现在我们在终端输入node index.js,就会出现

    数据库连接成功
    save status: success

    在Robomongo查看会看到我的mongo数据库下有了users表,并且数据已经保存进去了


    mongodb.png

    图中_id_v字段是系统自己添加的数据,其他的数据就和我们刚才在模型中定义的数据是完全一样的。
    当然你也可以通过命令行在终端查看是否添加成功。
    现在对于mongodb基本的操作就算成功啦~

    其他方法应用(增删改查)

    #index.js
    var mongoose = require('mongoose');
    require('./connect');
    require('./schema.js');
    var User = mongoose.model('User');//User为model name
    mongoose.Promise = global.Promise;
    
    var user = new User({
        name: 'douqing',
        age:18,
        sex:'女'
    });
    
    user.save(function (err) {    //增加
        console.log('save status:', err ? 'failed' : 'success');
    });
    
    User.find({}, function (err,results) {  //查找出数据库中所有数据
        if(err){
            console.log('error message',err);
            return;
        }
        console.log('results',results);
    });
    
    User.findOne({name : 'douqing'},function (err, result) {    //根据条件查找相应的数据
        if(err){
            console.log('error message:', err);
        }
        console.log('result', result); //输出name=‘douqing’的所有数据
    });
    
    User.findByIdAndUpdate('58ec4b0090c04916666ce203', {name: 'liji'}, //根据id查找对应数据并将name字段修改为‘liji’
    function (err, result) {
        if (err) {
            console.log('error message:' + err);
        }
        console.log(result);
    });
    
    User.remove({name:'douqing'},function (err, result) { //删除name=‘douqing‘对应的数据
        if (err){
            console.log('error message:' + err);
        }
        console.log('remove success');
    });
    

    运行index.js文件,即可在终端获得从数据库返回的数据。

    更多API详解http://mongoosejs.com/docs/api.html

    较深层次理解

    不知道大家对于上面的users表是如何产生的有没有疑问,当我在写代码时,并没有在任何地方指定或者创建users表。
    经过查证发现原来是schema.js文件中的mongoose.model('User', UserSchema)在作鬼。
    当我们没有指定表名时,系统默认会在name后面加s作为使用表名,所以这就可以解释为什么我们的表名是users(还会变成小写)

    mongoose.model()方法可以有四个参数

    1. name:为模型model的名称
    2. schema:为mongodb的document映射的schema
    3. collection:为真正的collection名称
    4. skipInit:为是否跳过初始化,默认为false

    那么现在我们可以将schema.js文件修改成这样

    var mongoose = require('mongoose');
    var UserSchema = new mongoose.Schema({ //定义一个Schema
        name: String,
        age: Number,
        sex: String
    });
    mongoose.model('User', UserSchema,'test',false);//这时我指定的表名为test
    

    运行index.js文件之后,在Robomongo上显示如下

    mongodb.png

    希望这篇文章有帮助到你~
    如果你有什么问题,可以在下面留言哦!

    相关文章

      网友评论

        本文标题:nodejs+mongodb小例子

        本文链接:https://www.haomeiwen.com/subject/lhgcattx.html