MongoDB的基本使用
特点:
- 使用BSON存储数据
- 支持相对丰富的查询操作
- 支持索引
- 副本集
- 分片
- 无模式
- 部署简单方便
服务的启动:
- MongoDB运行的两种方式
- 启动命令的使用
mongo 127.0.0.1:27017
连接指定ip地址下的27017端口
show dbs
查看数据库
db.users.insert({"username": "Sid"})
创建一个users的数据表,并且插入数据
show collection
查看当前的数据表
db.users.find()
查找当前数据表的插入数据
db.users.insert({"username": "Zoe","group": "reporter"});
为users数据表插入数据
b.users.update({"username":"Zoe"}, {$set: {"group":"writer"}});
查找到username:Zoe,并修改第一条username:Zoe的
group的值
db.users.update({"username":"Zoe"}, {$set: {"group":"programmer"}},{multi: true});
查找到username:Zoe,并修改全部username:Zoe的group的值
db.users.save({"_id": ObjectId("5a2601f0fb38eba7e7b50f9e"),"group":"reporter"})
通过_id插入group:reportert,和update的区别就是只保存插入的数据,以前的数据全部清除
db.users.remove({"group": "reporter"})
删除一个group:reporter的数据
db.users.remove({"group": "reporter"},true)
删除全部group:reporter的数据
db.users.remove({})
删除文档,但是索引还在
db.users.drop()
删除文档和索引
使用Mongoose模块操作MongoDB
- 模块介绍
- 配置与链接
- Model与Schema
- 创建文档
- 删除文档
- 简单查询
- 条件语句
Mogsoose:支持强类型模式也支持弱类型模式
Model与Schema:
- Model:建立node.js中的对象和mongodb中文档对应 的功能,通过操作Model创建删除,修改,查询的mongodb语言的文档
- Schema:实现mongoose中数据类型和结构的定义,从而在无模式的mongodb下实现模式化的存储
Model.js
var mongoose = require('mongoose');
var uri = 'mongodb://username:password@hostname:port/databasename';
uri = "mongodb://localhost/part9";
mongoose.Promise = global.Promise;
mongoose.connect(uri,{useMongoClient: true});
var BookSchema = mongoose.Schema({
name:String,
author:String,
publishTime:Date
});
mongoose.model('Book', BookSchema);
插入操作(insert.js):
var mongoose = require('mongoose');
require('./model.js');
var Book = mongoose.model('Book');
var book = new Book({
name:"MEAN Web Development",
author:"Green",
publishTime:new Date()
});
book.author = 'Jim';
book.save(function(err){
console.log('save status:', err ? 'failed' : 'success');
});
运行结果:
var mongoose = require('mongoose');
require('./model.js');
var Book = mongoose.model('Book');
Book.find({},function(err, docs){
if(err){
console.log('err:', err);
return;
}
console.log('result:', docs);
});
运行结果:
var mongoose = require('mongoose');
require('./model.js');
var Book = mongoose.model('Book');
Book.findOne({author:"Jim"}, function(err, doc){
if(err){
console.log('err:', err);
return;
}
doc.author = 'Jame';
doc.save();
console.log('findOne result:', doc)
});
运行结果:
var mongoose = require('mongoose');
require('./model.js');
var Book = mongoose.model('Book');
Book.findOne({author: 'Jim'}, function(err, doc){
if(err){
console.log('findOne err:', err);
return;
}
if(doc) {
doc.remove();
}
});
运行结果:
var mongoose = require('mongoose');
require('./model.js');
var Book = mongoose.model('Book');
var cond = {
$or: [
{author: 'Jame'},
{author: 'Jim'}
]
};
Book.find(cond,function(err, docs){
if(err) {
console.log('find by cond err:', err);
return;
}
console.log('cond:', cond, 'result:', docs)
});
运行结果:
在Express项目中使用Mongoose
- 使用express mongooseExpress创建默认项目,然后下载到本地,在本地mongooseExpress文件夹下新建文件夹models和config
- 在models文件夹下新建user.server.model.js,在config文件夹下新建config.js和mongoose.js
- 在mongooseExpress文件下的route文件夹下user.js进行修改和在mongooseExpress下app.js修改(修改的地方在下面)
- 在 mongooseExpress文件夹下使用命令cnpm install安装express和 cnpm install mongoose --save安装mongoose
- 然后在 mongooseExpress文件夹下命令node bin/www
- 最后Alt+Shift+t新建一个连接,通过命令curl localhost:3000/users/test查看
user.server.model.js:
var mongoose = require('mongoose');
var UserSchema = new mongoose.Schema({
uid: Number,
username: String,
createTime: Date,
loastLogin: Date
});
mongoose.model('User', UserSchema);
module.exports = {
mongodb: "mongodb://localhost/part9"
};
mongoose.js:
var mongoose = require('mongoose');
var config = require('./config.js');
module.exports = function(){
mongoose.Promise = global.Promise;
var db = mongoose.connect(config.mongodb,{useMongoClient: true});
require('../models/user.server.model.js');
return db;
}
app.js中引入mongoose:
var mongoose = require('./config/mongoose.js');
var db = mongoose();
user.js中添加的蓝字:
var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');
var User = mongoose.model('User');
/* GET users listing. */
router.get('/', function(req, res, next) {
res.send('respond with a resource');
});
router.get('/test', function(req, res, next){
var user = new User({
uid: 1,
username: 'Sid'
});
user.save(function(err){
if(err){
res.end('Error');
return next();
}
User.find({}, function(err, docs){
if(err){
res.end("Error");
return next();
}
res.json(docs);
});
})
});
module.exports = router;
运行结果: