MongoDB入門

MongoDB是由 C++ 編寫的基於分佈式文件存儲的非關係型數據庫(NoSQL),將數據存儲爲一個文檔,數據結構由鍵值(key=>value)對組成,相似於 JSON 對象。MongoDB 與其餘關係型數據庫相比,關係型數據庫必須建立表和字段,不然沒法使用,可是mongodb屬於「無狀態模式」,結構不須要設計,會自動建立數據庫和集合,直接使用便可,存什麼東西取決於咱們本身向他傳入什麼(當不存在則建立,不須要手動去建立)。MongoDB 數據存儲量大時,丟失率較高,適合存儲一些不過重要的信息。市面上用MongoDB的有紐約時報、優酷視頻等。html

安裝MongoDB

以 Windows 10 操做系統爲例,安裝MongoDB。mongodb

  • 去官網 https://www.mongodb.com/downl... 下載客戶端,這裏下載的是 mongodb-win32-x86_64-2008plus-ssl-3.2.10-signed.msi 。
  • 安裝在 C:Program FilesMongoDBServer3.2bin 目錄下。
  • 添加系統環境變量:此電腦=>屬性=>高級系統設置=>環境變量=>系統變量=>Path=>新建=>C:Program FilesMongoDBServer3.2bin 。
  • 在 D 盤建立 mongodb-data 文件夾。
  • 在 C:Program FilesMongoDBServer3.2bin 目錄下運行 $ mongod --dbpath D:\mongodb-data
  • 批處理: 新建文件 mongod批處理命令.bat ,內容爲 mongod --dbpath D:mongodb-data 或爲 C:Program FilesMongoDBServer3.2binmongod --dbpath D:mongodb-data 。點擊運行便可。
  • 安裝 NoSQL Manager for MongoDB 。 https://www.mongodbmanager.co... 下載免費版安裝。

MongoDB的API

假設存在數據庫 shop 有集合 goods。數據庫

  • $ mongo
  • $ show dbs
  • $ use shop
  • $ db.goods.find() 查詢
  • $ db.goods.findOne() 查詢一條數據
  • $ db.goods.find({"name": "XXX"}) 查詢name爲XXX的全部數據
  • $ db.goods.find({"name": "XXX"},{"_id": 0}) 查詢結果不顯示 _id
  • $ db.goods.find({"name": /X/}) 查詢name包括X的數據
  • $ db.goods.find({"name":/米/},{"name":1}).limit(3) 查詢結果只顯示name的3條數據
  • $ db.goods.find({"price": {"$gte":25,"$lte":27}) 查詢price在25-27之間的數據
  • $ db.goods.find({"country":{"$ne": "China"}}) 查詢country不是China的數據
  • $ db.goods.insert({"name": "XXX"}) 增長{"name": "XXX"}這條數據
  • $ db.googs.remove({/* 查詢條件 */}) 刪除
  • $ db.goods.update({/* 查詢條件 */},{"$set": {"name": "newName"}) 更新
  • $ db.goods.count({/* 查詢條件 */}
其餘查詢條件
  • {"country": {"$in": ['China', 'USA']} country是數組的某一個,相反就是$nin
  • {"$or":[{"c":{"$gte":85}},{"e":{"$gte":90}}]} c>85或者e>90
  • {"color":{"$all":["red","black"]}} color有red和black,二者都有
  • {"name":{"$not":/li/i} name不存在li,$not 能夠反正任何地方取反
  • {"books.1":"JS"} books是數組,第二項是JS
  • {"area.province":"sc"} area是對象,屬性province是sc
  • {"books":{"$size":4}} books的長度爲4
備份與還原
  • 把shop備份到D:data:$ mongodump -h 127.0.0.1:27017 -d shop -o D:\data
  • 從D:data還原shop: mongorestore -h 127.0.0.1:27017 -d shop D:\data
導入數據

另起命令行,不是在mongo裏面 $ mongoimport --db mydbs --collection product --drop --file file是導入json文件的路徑(),注意--drop是先刪除後導入,也能夠不用--drop不刪除直接導入。express

Nodejs操做MongoDB

const MongoClient = require('mongodb').MongoClient;
const express = require("express");
const app = express();
const dbName = "mongodb://localhost:27017"; // mongodb的默認端口是27017
// connect --> insert、remove、update、find -->close
app.get("/", (req, res) => {
    MongoClient.connect(dbName, (err, db) => {
        if (err) { // err爲一串錯誤,db爲null
            console.log("鏈接失敗");
            return;
        }
        // 不然就是err爲null,db爲一串數據
        console.log("鏈接成功");
        // 在mydata的bbs集合(表)中插入一條數據,不存在bbs則建立
        db.db("mydata").collection("bbs").insertOne({
            "name": "myfirst"
        }, (err, result) => {
            if (err) {
                console.log("數據庫寫入失敗");
                return;
            }
            console.log("成功插入");
            db.close();
        });
    });
    res.end();
});
app.listen(3000);

有參數的json

const MongoClient = require('mongodb').MongoClient
const express = require('express')
const app = express()
const dbName = 'mongodb://localhost:27017'

app.set('view engine', 'ejs');

app.get('/add', (req,res)=>{
    res.render('add'); // views目錄下的add.ejs
})

app.get('/manage',(req,res)=>{
    let {name, age, sex} = req.query;
    MongoClient.connect(dbName,(err,db)=>{
        if(err)return;
        
        res.writeHead(200,{'Content-type': 'text/html;charset=utf-8'});
        res.write('鏈接數據庫成功');
        db.db('dnedu').collection('bbs').insertOne({name,age,sex},(err,result)=>{
            if(err)return;

            res.end();
            db.close();
        })
    })
})

app.listen(80);


<!--views/add.ejs-->
<form action="/manage" method="get">
    <p>姓名:<input type="text" name="name" /></p>
    <p>年齡:<input type="text" name="age" /></p>
    <p>性別:<input type="text" name="sex" /></p>
    <p><input type="submit" value="提交" /></p>
</form>

數據變化可在 NoSQL Manager for MongoDB 查看。數組

相關文章
相關標籤/搜索