nodejs+mongodb小例子

学习是一个慢慢理解的过程,所以会不间断更新~

上次学习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表,并且数据已经保存进去了

《nodejs+mongodb小例子》 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上显示如下

《nodejs+mongodb小例子》 mongodb.png

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

    原文作者:DouQing
    原文地址: https://www.jianshu.com/p/7656095ab3a0
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞