启动和关闭数据库
安装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();
})
搭建开发环境工具
- express
$ express 项目名(项目名可忽略)
- mongodb (全局配置此处可省略)
$ cnpm install mongodb --save
- 添加依赖包
$ 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地址: