前端最基礎的就是 HTML+CSS+Javascript
。掌握了這三門技術就算入門,但也僅僅是入門,如今前端開發的定義已經遠遠不止這些。前端小課堂(HTML/CSS/JS
),本着提高技術水平,打牢基礎知識的中心思想,咱們開課啦(每週四)。html
show dbs
use <DATABASE_NAME>
。好比說咱們切換到 admin 數據庫 use admin
。db
show collections
db.dropDatabase()
由於沒有表的概念(集合),也不要求字段一致(文檔)。因此咱們直接快樂的操做數據就行了。前端
操做命令爲 db.<collection>.<>
,好比咱們查 user 表的記錄 db.user.find()
。mysql
也可使用 tab 來自動補全。sql
注意: 在 MongoDB 中,集合只有在內容插入後纔會建立! 就是說,建立集合(數據表)後要再插入一個文檔(記錄),集合纔會真正建立。(db.createCollection(name, options)
這種建立命令不會也罷,固然若是你須要定製 options 仍是須要使用的)mongodb
db.<collection>.insert(document)
插入一個文檔,若是主鍵重複則報錯。(3.2+ 新增)db.<collection>.insertOne(document)
數據庫
db.collection.insertOne( <document>, { writeConcern: <document> } )
參數說明:npm
插入多個文檔,若是主鍵重複則報錯。(3.2+ 新增)db.<collection>.insertMany([document1,document2])
segmentfault
db.collection.insertMany( <document>, { writeConcern: <document>, ordered: <boolean> } )
參數說明:api
查詢文檔db.<collection>.find()
微信
db.collection.find( query, projection )
參數說明:
db.<collection>.findOne()
更新集合db.<collection>.update()
db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> } )
參數說明:
插入一個文檔,若是主鍵重複則更新。(相似於 mysql 中的 insertAndUpdate)(3.2+ 廢棄)db.<collection>.save(document)
db.collection.save( <document>, { writeConcern: <document> } )
參數說明:
更多實例
// 只更新第一條記錄: db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } ); // 所有更新: db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true ); // 只添加第一條: db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false ); // 所有添加進去: db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true ); // 所有更新: db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true ); // 只更新第一條記錄: db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );
db.<collection>.drop()
刪除文檔 db.<collection>.remove()
db.collection.remove( <query>, { justOne: <boolean>, writeConcern: <document> } )
參數說明:
db.<collection>.deleteOne(<query>)
db.<collection>.deleteMany(<query>)
db.col.find({"author":"www.lilnong.top"}).pretty()
查詢全部 author=="www.lilnong.top"
的記錄db.col.find({"author":/nong/}).pretty()
模糊查詢全部 author
包含 nong
的記錄db.col.find({"likes":{$lt:50}}).pretty()
查詢全部 likes < 50
的記錄db.col.find({"likes":{$lte:50}}).pretty()
查詢全部 likes <= 50
的記錄db.col.find({"likes":{$gt:50}}).pretty()
查詢全部 likes > 50
的記錄db.col.find({"likes":{$gte:50}}).pretty()
查詢全部 likes >= 50
的記錄db.col.find({"likes":{$ne:50}}).pretty()
查詢全部 likes != 50
的記錄db.col.find({"likes":{$eq:50}}).pretty()
查詢全部 likes == 50
的記錄db.col.find({"author":"www.lilnong.top","likes":{$lt:50}}).pretty()
查詢全部 author=="www.lilnong.top" && likes < 50
的記錄db.col.find({$or:[{"author":"www.lilnong.top"},{"likes":{$gt:50}}]}).pretty()
查詢全部 author=="www.lilnong.top" or likes > 50
的記錄使用 limit()
方法來讀取指定數量的數據。
使用 skip()
方法來跳過指定數量的數據。
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
使用 sort()
方法來排序,1 爲升序排列,而 -1 是用於降序排列。
db.COLLECTION_NAME.find().sort({links: 1})
表示以 links 字段升序排列
經常使用的有兩個庫,mongodb
和 mongoose
The official MongoDB driver for Node.js. Provides a high-level API on top of mongodb-core that is meant for end users.
npm install mongodb --save
var MongoClient = require('mongodb')
var MongoClient = require('mongodb').MongoClient; // console.log(MongoClient) MongoClient.connect( 'mongodb://localhost:27017/sf-mongodb', {}, async function(err, db){ if(err) return console.error(err) // console.log(db); var dbo = db.db('sf-mongodb'); // var data = await dbo.collection('user').find().toArray(); // console.log(data) // 查詢歷史數據 // data = await find2array(dbo, 'user'); // console.log(data) consoleFindResult(dbo) // 清空歷史數據 await dbo.collection('user').deleteMany({}) consoleFindResult(dbo) // 批量插入數據 CURD之C create await dbo.collection('user').insertMany([ {author: 'www.lilnong.top', operManyCount: 1, operKey: 'insertMany', time: new Date()}, {author: 'www.lilnong.top', operManyCount: 2, operKey: 'insertMany', time: new Date()} ]) consoleFindResult(dbo, 'C-Many') // 單條插入數據 CURD之C create await dbo.collection('user').insertOne({author: 'www.lilnong.top', operKey: 'insertOne', time: new Date()}) consoleFindResult(dbo, 'C-One') // 批量更新數據 CURD之U update await dbo.collection('user').updateMany({operKey: 'insertMany'},{$set: {lastUpdateTime: new Date()}}) consoleFindResult(dbo, 'U-Many') // 單條更新數據 CURD之U update await dbo.collection('user').updateOne({operKey: 'insertMany'},{$set: {lastUpdateTime: new Date()}}) consoleFindResult(dbo, 'U-One') // 讀取數據 CURD之R read console.log('R', await dbo.collection('user').find().skip(1).limit(1).toArray()) // 刪除數據 CURD之D delete await dbo.collection('user').deleteOne({operKey: 'insertMany'}) consoleFindResult(dbo, 'D-One') } ) async function find2array(dbo, collection){ return dbo.collection(collection).find().toArray(); } async function consoleFindResult(dbo, key){ var data = await find2array(dbo, 'user'); console.log(key, data.map(v=>JSON.stringify(v))) }
比較原始的方式
var MongoClient = require('mongodb').MongoClient; var url = "mongodb://localhost:27017/sf-mongodb"; MongoClient.connect( url, { useNewUrlParser: true }, function(err, db) { if (err) throw err; var dbo = db.db("sf-mongodb"); dbo.collection('user').insertOne( {author: 'www.lilnong.top', operKey: 'insertOne', time: new Date()}, function(err, res) { if (err) throw err; console.log("文檔插入成功", res); } ); dbo.collection('user').insertMany( [ {author: 'www.lilnong.top', operManyCount: 1, operKey: 'insertMany', time: new Date()}, {author: 'www.lilnong.top', operManyCount: 2, operKey: 'insertMany', time: new Date()} ], function(err, res) { if (err) throw err; console.log("文檔插入成功", res); } ); dbo.collection("user"). find({}).toArray(function(err, result) { // 返回集合中全部數據 if (err) throw err; console.log(result); }); dbo.collection("user").updateOne({}, {$set: {random: Math.random()}}, function(err, res) { if (err) throw err; console.log("文檔更新成功"); }); dbo.collection("user").deleteOne({}, function(err, obj) { if (err) throw err; console.log("文檔刪除成功"); }); } );
Mongoose 爲模型提供了一種直接的,基於scheme結構去定義你的數據模型。它內置數據驗證, 查詢構建,業務邏輯鉤子等,開箱即用。
我感受就是和一些 ORM 之類的差很少。建立一個模型(model),Mongoose 會自動找到 複數 形式的 collection
支持 MongoDB 的高級(
rich )查詢語法。 查詢文檔能夠用
model
的
find,
findById,
findOne, 和
where 這些靜態方法。要了解
Query api 的更多細節,能夠查閱
querying 章節。
安裝:npm install mongoose --save
引入:mongoose = require('mongoose')
// Mongoose 的一切始於 Schema。 // 每一個 schema 都會映射到一個 MongoDB collection ,並定義這個 collection 裏的文檔的構成。 var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/sf-mongodb'); var Schema = mongoose.Schema; var userSchema = new Schema({ author: String, date: { type: Date, default: Date.now } }); var User = mongoose.model('User', userSchema); const user = new User({ author: 'lilnong.1' }); user.save().then(() => console.log('init1', 'success'));
// 直接使用對象也是能夠的 const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/sf-mongodb'); const User = mongoose.model('User', { author: String }); const user = new User({ author: 'lilnong.2' }); user.save().then(() => console.log('init2', 'success'));
C 保存
const User = mongoose.model('User', { author: String }); const user = new User({ author: 'lilnong' }); user.save().then(() => console.log('init3','success'));
U 更新
const User = mongoose.model('User', { author: String }); User.updateOne( {author: 'lilnong.2'}, {author: 'lilnong.3'} ).then(console.log)
R 讀取
const User = mongoose.model('User', { author: String }); // 查詢全量數據 User.find().then(console.log) // 查詢 author == 'lilnong.test' 的數據 User.find({ author: 'lilnong.test' }).then(console.log)
D 刪除
const User = mongoose.model('User', { author: String }); // 刪除全部 author 爲空的 User.remove({author: null}).then(console.log);