启动和关闭数据库

安装MongoDB数据库

1.下载mongodb,官网(https://www.mongodb.com/)

2.在磁盘(如D盘)创建一个mongo目录,作为安装位置,建议别装在C盘(出于方便)

3.安装到mongo目录下 D:mongo/

注意:就算使用默认的安装路径,最后也要看一眼安装到什么地方去了

安装完成后,查看安装目录,如下:

对bin目录需要了解一下
bin其实是binary的简写,一般bin目录下存放的都是一些以.exe结尾的一些工具。
Exe是指可执行文件。

4.在mongo目录下创建data目录,用于保存数据(必不可少)

要使用,首先需要开启服务,需要在mongo安装目录下创建一个data目录,如图:

结合shift,在当前目录,右键即可进入

6.使用mongod --dbpath=d:/mongo/data 启动服务

开服务成功,可以看到如下信息:

我们可以在浏览器中,输入 http://localhost:27017/ 访问:

当然,在任务管理中也可以看到

注意: 如果遇到mongd不是内部命令,

1、需要配置环境变量,在安装目录bin目录下,D:/mongodb/bin,把这个地址配置到环境变量path中。

2、如果不能启动服务,需要在安装盘符下面创建一个data目录data里面创建db文件夹

1、启动

# mongodb 默认使用执行 mongod命令所处盘符根目录下的/data/db作为自己的数据存储目录

# 所以第一次执行该命令之前先自己手动创建一个 /data/db

例如:D:/data/db

mongod

如果修改默认的数据存储目录,可以;

mongod --dbpath=数据存储目录路径

2、停止

在开启的控制台,直接Ctrl+c即可停止。
或者直接关闭开启服务的控制台也可以

3、连接数据库
该命令默认连接本机的mongoDB服务

mongo

4、退出数据库
连接状态

exit

5、基本命令

  • show dbs //查看显示所有数据库
  • db //查看当前操作的数据库
  • use 数据库名称 //切换到指定的数据(如果没有会新建)
  • 插入数据

在node中如何操作MongoDB数据

使用官方的mongodb包来操作

第一步;在工作目录中

1、安装驱动 cnpm i mongodb --save

第二步;在工作目录中新建app.js

//app.js
//第一步,引入mongo驱动,并初始化一个客户端对象(MongoClient)
var mongodm = require('mongodb').MongoClient;
//需要指定使用mongodb协议,去连接本机在2717端口运行的mongdb服务
var url = 'mongodb://localhost:27017';
//连接mongodb数据库
mongodm.connect(url,{useNewUrlParser: true},function(err,con){
    if(err) throw err
    console.log('数据库连接成功!');
    //获取到mongodb数据库中的jack库
    var db = con.db('jack');
    //获取到mongo数据库中的jack库->user集合
    var obj = db.collection('user');
    /*使用
    //insertOne({},function(){}) //插入一个文档
    //insertMany([{},{}],function(){})插入多个文档
    */
    obj.insertMany([{'name':'jia','age':23},{'name':'yi','age':26}],function(err,con){
        if(err) throw err
        console.log('添加数据成功!');
    });
    //关闭断开数据库
    con.close();
})

搭建开发环境工具

  1. express

$ express 项目名(项目名可忽略)

  1. mongodb (全局配置此处可省略)

$ cnpm install mongodb --save

  1. 添加依赖包

$ cnpm install

注:配置全局node-dev
node-dev是一个node.js开发工具,当文件被修改时,它会自动重新启动node进程。

$ cnpm install -g node-dev

package.json
{
  "name": "express+mongodb",
  "scripts": {
    "start": "node-dev ./bin/www"
  }
}

启动服务(当前开发工作目录下)

$ npm start

$ npm root -g 查看全局的包的安装路径

mongodb/index.js
var mongodm = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017';
function connect(fn){
    mongodm.connect(url,{useNewUrlParser: true},function(err,con){
        if(err){
            fn(err);
            return; 
        }
        var db = con.db('jack');
        var collection = db.collection('user');
        //先判断fn是否存在,存在fn的情况下,执行fn.call(obj) 
        //等价于 if(fn){ fn.call(obj)}
        fn && fn(null,collection);
    })
}
//抛出模块
module.exports = connect;

routes/index.js

var express = require('express');
var router = express.Router();

//引入mongodb模块
var connect = require('../mongodb')

/* 查询用户信息 */
router.get('/api', function(req, res, next) {
    connect(function(err,con){
      if(err){
        err
      }else{
        console.log('连接成功!')
        //查询方法
        con.find().toArray(function(err,resurt){
          if(err){
            res.json({code:0,msg:err})//返回错误信息
          }else{
            res.json({code:1,data:resurt}) //返回数据
          }
        })
      }
    })
});

封装的mongodb数据库增删改查基本操作

引入

var Mongo= require("mongodb-curd"); //封装了mongodb增删改查相关方法

名称解释:

  • batabaseName 数据库名
  • collcationName 集合名
增加
  • Mongo.insert(数据库名,集合名,条件,回调)
Mongo.insert(batabaseName,collcationName,data,function(result){
    if(!result){
       res.json({
           code:0,
           mes:"error"
        })
    }else{
        res.json({
           code:1,
           mes:"success",
           data:result
        })
    }
})
insert方法相关说明:
- `data` 插入单条数据data值为一个对象,插入多条数据data值为数组
- `callback` 接受一个参数result,result为成功之后的返回结果
删除
  • Mongo.remove(数据库名,集合名,删除条件,回调)
Mongo.remove(batabaseName,collcationName,data,function(result){
    if(!result){
       res.send({
           code:0,
           mes:"error"
        })
    }else{
        res.send({
           code:1,
           mes:"success",
           data:result
        })
    }
})

remove方法相关说明:
- `data` 要删除数据的描述对象
如果根据_id查询直接写{_id:"12323323"} 值直接是一个普通字符串
- `callback` 接受一个参数result,result为成功之后的返回结果
修改
  • Mongo.update(数据库名,集合名,修改条件,回调)
Mongo.update(batabaseName,collcationName,array,function(result){
    if(!result){
       res.send({
           code:0,
           mes:"error"
        })
    }else{
        res.send({
           code:1,
           mes:"success",
           data:result
        })
    }
})

update方法相关说明:
- `array` 数组接受两个值,第一个放查找要更新的对象,第二个值为要替换的对象。
如果根据_id查询直接写{_id:"12121"} 值直接是一个普通字符串。
- `callback` 接受一个参数result,result为成功之后的返回结果。
查询全部
  • Mongo.find(数据库名,集合名,删除条件,回调)
Mongo.find(batabaseName,collcationName,data,function(result){
    if(!result){
       res.send({
           code:0,
           mes:"error"
        })
    }else{
        res.send({
           code:1,
           mes:"success",
           data:result
        })
    }
},{
    skip:0,
    limit:0
})

find方法相关说明:
- `data`  要查询的数据的描述对象
如果根据_id查询直接写{_id:"12323323"} 值直接是一个普通字符串
- `callback` 接受一个参数result,result为查找出来的数据结果
分页查询和数据排序
  • Mongo.find(数据库名,集合名,删除条件,回调)
Mongo.find(batabaseName,collcationName,data,function(result){
    if(!result){
       res.send({
           code:0,
           mes:"error"
        })
    }else{
        res.send({
           code:1,
           mes:"success",
           data:result
        })
    }
},{
    skip:0,
    limit:0,
    sort:{
    	"key":1 //正序 -1 倒序
    }
})
MongoDB 条件操作符

操作符

表达式

用法

$lt

< (小于)

db.getCollection(‘student’).find({‘age’:{’$gt’:‘20’}})

$lte

<= (小于等于)

…({‘age’:{’$lte’:‘20’}})

$gt

> (大于)

…({‘age’:{’$gt’:‘20’}})

$gte

>= (大于等于)

…({‘age’:{’$gte’:‘20’}})

$ne

!= (不等于)

…({‘age’:{’$ne’:‘20’}})

$in

在范围内

…{‘age’: {’$in’: [20, 23]}} (注:数组形式)

$nin (not in)

不在范围内

…{‘age’: {’$nin’: [20, 23]}} (注:数组形式)

$exists

属性是否存在

{‘name’: {’$exists’: True}} 查找name属性存在

$type

类型判断

{‘age’: {’$type’: ‘int’}} ; age的类型为int

$and

操作的两个或更多的表达式,并且满足所有阵列中的表达式

$and:[ { <表达式1> }, { <表达式2> } , … , {<表达式N> } ]

$regex (正则匹配)

匹配以M开头的名字

…db.collection.find({‘name’: {’$regex’: ‘^M.*’}})

/模糊查询/

匹配模糊查询所有包含有"ab"字符串的数据

…db.collection.find({“name”:new RegExp(ab) })

$text

文本查询


$or

查找多种条件

…({’$or’:[{‘name’:‘chen’},{‘name’:‘wang’}]})

① :

…db.collection.find({'$text': '$search': 'lucy'}} 
//text类型的属性中包含lucy字符串
组合使用方法如下:
db.user.find({"age":{"$gte":18,"$lte":25}})
     
//对于日期的条件查询方法:
db.getCollection('news').find({'pub_date':{'$gte':'2017-07-11  11:0:0'}})

github地址:

https://github.com/JSFFZL/1610C-express-mongo-api