mongod
(此前須要安裝了mongo數據庫,並建立過mongodb的目錄:$ mkdir -p /data/db)node
啓動mongodb後,可使用mongo命令行來操做數據庫,或使用Robomongo這樣的GUI客戶端。sql
使用一個數據庫:(mongodb不須要預先建立數據庫,當給一個數據庫寫入內容時會自動建立)mongodb
$ use mytest
插入數據:(給mytest數據庫下的users集合插入一條文檔)數據庫
$ db.users.insert({"username": "nuanfeng"})
而後能夠查看數據庫和集合:express
$ show dbs
$ show collections
查看users集合中的全部文檔:npm
$ db.users.find()
再添加一條數據:(mongodb是無模式的,因此能夠添加不一樣格式的數據)json
$ db.users.insert({"username": "Zoe", "group": "reporter"})
再用db.users.find()查看,以下:瀏覽器
查看數據的數量:安全
$ db.users.find().count()
根據id查詢數據:服務器
$ db.users.find({"_id": ObjectId("584bc73ea635e489676cf5db")})
更新數據: (匹配到的第一條)
$ db.users.update({"username": "Zoe"}, {$set: {"group": "writer"}})
更新數據: (匹配到的全部)
$ db.users.update({"username": "Zoe"}, {$set: {"group": "writer"}}, {multi: true})
用save()也能夠修改數據:(必須根據‘_id’,會直接替換掉原來的數據)
db.users.save({"_id": ObjectId("584bc73ea635e489676cf5db"), "group": "reporter"})
刪除知足條件的全部:
$ db.users.remove({"group": "reporter"});
刪除知足條件的第一條:
$ db.users.remove({"group": "reporter"}, true);
刪除集合中的全部文檔:
$ db.users.remove({})
刪除整個集合(全部文檔和索引)
$ db.users.drop()
Mongoose是將nodejs的對象和MongoDB中的文檔對應的一個模塊。
Mongoose既支持強模式,也支持無模式。
安裝mongoose:
$ npm install mongoose
先看一下最終的目錄結構:
連接的格式:(也能夠省略用戶名、密碼、端口號)
var uri = 'mongodb://username:password@hostname:port/databasename' mongoose.connect(uri);
Model使nodejs對象和MongoDB中的文檔相對應,Schema實現了Model的數據類型和結構的定義,從而在無模式的MongoDB中實現了模式化的存儲。
model.js
/** 配置並連接MongoDB **/ var mongoose = require('mongoose'); var uri = 'mongodb://localhost/mongoose-base'; mongoose.connect(uri); /** 建立Schema、建立Model **/ var BookSchema = new mongoose.Schema({ name: String, author: String, publishTime: Date }); mongoose.model('Book', BookSchema);
insert.js
var mongoose = require('mongoose'); require('./model.js'); /** 獲取Model,建立Book的實例 Entity **/ var Book = mongoose.model('Book'); var book = new Book({ name: 'MEAN Web Develop', author: 'Green', publishTime: new Date() }); book.author = 'Jim'; // 參數能夠從新指定 /** 插入數據 **/ book.save(function(err) { // 執行保存,並查看返回狀況 console.log('save status:', err ? 'failed' : 'success'); })
find.js
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(docs) })
findOne.js
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 = 'James'; doc.save(); console.log('findOne result:', doc) })
remove.js
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: 'Jim'}, {author: 'James'} ] }; Book.find(cond, function(err, docs){ if(err) { console.log('find by cond err:', err); } console.log('cond:', cond, 'result:', docs); })
這裏咱們用express-generator來快速生成express應用(先安裝好node、npm、express-generator、mongodb)
$ express mongooseExpress
先看下最終的項目結構圖:
新建config文件夾,用來放置數據庫配置信息
config/config.js
module.exports = { mongodb: 'mongodb://localhost:27017/mongoose-test' }
config/mongoose.js
var mongoose = require('mongoose'); var config = require('./config.js'); module.exports = function() { var db = mongoose.connect(config.mongodb); require('../models/user.server.model.js'); return db; }
在app.js的路由模塊前引用剛纔建立的mongoose配置信息(8,9兩行)
1 var express = require('express'); 2 var path = require('path'); 3 var favicon = require('serve-favicon'); 4 var logger = require('morgan'); 5 var cookieParser = require('cookie-parser'); 6 var bodyParser = require('body-parser'); 7 8 var mongoose = require('./config/mongoose.js'); 9 var db = mongoose(); 10 11 var index = require('./routes/index'); 12 var users = require('./routes/users');
新建models文件夾
/models/user.server.model.js
var mongoose = require('mongoose'); var UserSchema = new mongoose.Schema({ uid: Number, username: String, createTime: Date, lastLogin: Date }); mongoose.model('User', UserSchema);
咱們直接在users路由模塊中加入數據庫存取操做的代碼
/routes/users.js
1 var express = require('express'); 2 var router = express.Router(); 3 4 var mongoose = require('mongoose'); 5 var User = mongoose.model('User'); 6 7 /* GET users listing. */ 8 router.get('/', function(req, res, next) { 9 res.send('respond with a resource'); 10 }); 11 12 router.get('/test', function(req, res, next) { 13 var user = new User({ 14 uid: 1, 15 username: 'nuanfeng' 16 }) 17 18 user.save(function(err){ 19 if(err) { 20 res.end('Error'); 21 return next(); 22 } 23 24 User.find({}, function(err, docs) { 25 if(err) { 26 res.end('Error'); 27 return next(); 28 } 29 30 res.json(docs); 31 }) 32 }) 33 }) 34 35 module.exports = router;
$ node bin/www
而後在瀏覽器中訪問:http://localhost:3000/users/test,就能往數據庫中存入一條記錄,並在當前頁面返回它的json數據