mongodb數據的結構
數據庫 => 集合 => json數據(行)
數據庫的cmd操作
1. 連接數據庫
mongo 連接數據庫,以便於管理/操作
2. 查看數據庫
show dbs 查看所有數據庫
mongodb內置數據庫: amdin config local 不要動
3. 創建/進入/刪除數據庫
use 數據庫名 進入該數據庫(操作該數據庫前必須先進入) , 若無該數據庫則創建
只有進入了某個數據庫,以下的 db.xxx 命令才能使用
db.dropDatabase() 刪除當前數據庫
4. 創建/查找/刪除集合
show collections 查看當前數據庫的所有集合
db.集合名.drop() 刪除當前集合
5. json的插入
db.集合名.insert( { “name”: “juln” } ) 在某集合中插入內容,若無該集合則創建
6. json的查找
db.集合名.find() 查看某集合的所有數據
db.集合名.find( { “name”: “juln” } ) 查找指定數據
db.集合名.find( { “name”: /ju/ } ) 模糊查詢,正則
db.集合名.find( { “age”: { $lt: 22 } } ) $lt爲 age<22 , $gt爲 age>22 , $gte 大於等於 , $lte 小於等於 , { $lt: 22, $gt: 25 } 大於22小於25
db.集合名.find( {}, { name: 1, age: 1 } ) 查找後只顯示部分列
db.集合名.find().sort( { age: 1 } ) 升序降序,1爲升序,-1爲降序
db.集合名.find().limit(5) 查詢前5條數據
db.集合名.find().skip(10) 跳過前10條數據再查詢
db.集合名.find().skip(10).limit(2) 查詢第11,12條數據
db.集合名.find().count() 統計行數
db.集合名.find( { $or: [{age:22},{age:25}] } ) 與查詢 or
db.集合名.findOne() 查找第一條數據 (不常用)
7. JavaScript
cmd mongodb 可以使用JavaScript語句 , 如
for(let i = 0; i < 100; i++) {
db.集合名.insert( { “id”: i } )
}
json的修改
db.集合名.update( { “name”: “juln” }, { “name”: “hhh” } ) 查找到name爲juln的第一條數據,並用 {“name”: “hhh”} 完全替換該數據
db.集合名.update( { “name”: "juln }, { $set: {“age”:20} } ) 查找到name爲juln的第一條數據,並修改age爲20
db.集合名.update( { “sex”: “男” }, { $set:{“age”: 33} }, { multi: true } ) 更新所有匹配的數據
json的刪除
db.集合名.remove( {} ) 刪除所有
db.集合名.remove( { “name”: “juln” } ) 刪除name爲juln的數據
db.集合名.remove( { “sex”: “男” }, { justOne: true } ) 刪除sex爲男的第一條數據
mongodb進階/高級
https://www.bilibili.com/video/BV16f4y1U7oT?p=21 21~24
Node.js操作Mongodb
推薦菜鳥教程 https://www.runoob.com/nodejs/nodejs-mongodb.html
下載包
npm i mongodb
連接/創建數據庫
要連接的數據庫不存在時,自動創建數據庫
const MongoClient = require('mongodb').MongoClient
const dbName = 'test'
const url = 'mongodb://127.0.0.1:27017/' + dbName // 默認爲27017,具體是多少通過cmd mongo查看
MongoClient.connect(url, { useNewUrlParser: true }, (err, db) => { // { useNewUrlParser: true } 是官方推薦要加上的
if (err) throw err
console.log("數據庫已創建!")
db.close()
})
或
const MongoClient = require('mongodb').MongoClient
const assert = require('assert')
const url = 'mongodb://127.0.0.1:27017'
const dbName = 'test'
const client = new MongoClient( url, { useNewUrlParser: true } )
client.connect( err => {
assert.equal(null,err)
console.log("數據庫連接成功!")
const db = client.db(dbName)
const collection = db.collection('test') // 獲取test集合
// 查詢
collection.find({}).toArray( (err,data) => {
console.log(data)
client.close() // 關閉數據庫連接
})
// 插入
collection.insertMany( [ {"name":"juln",age:20}, {"name":"zhuang",age:20} ], (err,result) => {
console.log("插入的數量爲: " + result.insertedCount)
client.close()
})
collection.insertOne( { "name": "juln" }, (err,result) => {
console.log(result)
client.close()
})
// 更新
collection.updateOne( { "name": "juln" }, { $set: {age:20} }, (err,result) => {
console.log(result)
client.close()
})
// 刪除
collection.deleteMany
collection.deleteOne( { "name": "juln" }, err => { // 找不到數據就不會刪除,所以不會報錯
if(err){
console.log('刪除失敗')
return
}
client.close()
})
})
服務器只能被請求一次的原因
這裏的評論區有提到 http://www.imooc.com/wenda/detail/584619
所以 client.close() 就都不要寫了,統統去掉,輕輕鬆鬆