亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MongoDB教程

發布時間:2020-02-26 13:56:36 來源:網絡 閱讀:1463 作者:xxxpjgl 欄目:MongoDB數據庫

一、安裝
然后配置環境變量,找到bin目錄,復制路徑,path下面新建,然后copy目錄進去,確定即可
配置“環境變量”,目的是在命令行中直接使用,而不需要輸入很長的路徑進入安裝目錄下再進行使用了。
1、打開終端,輸入mongod,啟動MongoDB服務器
2、出現錯誤,原因:C:\目錄下,沒有 data\db 文件夾,解決方法:在c盤下,新建data文件夾,在data下面再新建db文件夾;因為MongoDB在Windows中默認的數據庫目錄是c:\data。如果在沒有該目錄的情況下,直接運行mongod,就會報錯誤
3、但是我們可以更改數據庫目錄
mongod --dbpath=D:\妙味課堂文件夾\190122Nodejs開發博客系統\db --port=27017
--dbpath是指定數據庫存放目錄
--port是指數據庫端口號
4、重新輸入mongod,啟動MongoDB服務器,默認端口27017
5、成功啟動MongoDB服務器后,再打開一個命令行窗口輸入mongo,連接數據庫,然后就可以進行數據庫的一些操作。

  • show dbs:查看已經存在的數據庫
    MongoDB教程
  • db.version() :查看數據庫版本
  • show users:顯示用戶
  • use admin :進入admin數據庫,現在就可以使用這個庫了(如果沒有這個庫,就會自動新建這個庫),如果該新建的庫下面沒有數據,默認不顯示該庫
  • show collections:查看該數據庫下所有的集合
  • db:查看目前在哪個數據庫下,或者說目前正在使用哪個數據庫

二、MongoDB與關系型數據庫的區別
MongoDB教程
比如:mysql的表tables,MongoDB這里叫集合collections,集合里面的每一條數據叫做文件(document)

mongoDB是非關系型數據庫,將數據存儲為一個文檔,數據結構由鍵值對組成。mongoDB文檔類似于JSON對象,字段值可以包含其他文檔、數組及文檔數組。
一個mongoDB可以建立多個數據庫

三、創建數據庫,插入數據,查看數據
use user //新建數據庫
db.user.insert({ "name":"xiao" }) //增加一條數據
db.user.find() // 查看所有的數據
db.user.findOne() // 顯示第一條數據
db.user.update({ "name":"xiao" },{"name":"kate","age":"18"}) //修改數據
db.user.remove({ "name":"xiao" }) //刪除數據

四、用js文件寫mongo命令

//將用戶名和登錄時間插入log庫,通過goTask.js操作,變量均使用var定義,不要使用let
var userName="jspang";    //聲明一個登錄名             
var timeStamp=Date.parse(new Date());     //聲明登錄時的時間戳  
var jsonDdatabase={"loginUnser":userName,"loginTime":timeStamp}; //組成JSON字符串
var db = connect('log');   //鏈接數據庫,在命令行是使用use log,在js文件里是使用connect('log'),沒有即創建庫
db.login.insert(jsonDdatabase);  //插入數據
print('[demo]log  print success');  //沒有錯誤顯示成功

//執行文件,命令行:mongo goTask.js

五、批量插入
在操作數據庫時要注意兩個能力:
第一個是快速存儲能力。
第二個是方便迅速查詢能力。
注意一次插入不要超過48M,插入.zip和大圖片什么的盡量用靜態存儲,MongoDB存儲靜態路徑就好,這也算是一個規則。
在工作中如果在循環插入和批量插入舉起不定,那就選批量插入吧,它會給我們更優的性能體驗。

九、在express里面使用mongoDB
1、理解mongoose的屬性、模型
2、mongoose是mongoDB的一個對象模型工具,是基于node-mongodb-native開發的mongoDB的nodejs驅動,可以在異步的環境下執行。同時它也是針對mongoDB操作的一個對象模型庫,封裝了mongoDB對文檔的一些增刪改查等常用方法,讓nodejs操作mongoDB數據庫變得更加容易。
如果要通過mongoose創建一個集合并對其進行增刪改查,就需要用到Schema(數據屬性模型)、Model、Entity
3、Schema (屬性)
在Mongoose里一切都是從Schema開始的,每一個Schema都會映射到MongoDB的一個collection上。Schema定義了collection里documents的模板(或者說是框架)。一種以文件形式存儲的數據庫模型骨架,不具備數據庫的操作能力,僅僅只是數據庫模型在程序片段中的一種表現,可以說是數據屬性模型(傳統意義的表結構),又或者是集合的模型骨架。基本屬性類型有字符串、日期型、數值型、布爾型、null、數組、內嵌文檔等。

var blogSchema = new Schema({ // Schema頭字母大寫,因為Schema是構造函數
  title:  String,
  comments: [{ body: String, date: Date }], // 對象數組
  date: { type: Date, default: Date.now }, // 通過default設置默認值
  hidden: Boolean,
  meta: { // 嵌套對象
    votes: Number,
    favs:  Number
  }
});

4、model (模型)
為了使用定義好的Schema,我們需要把blogSchema轉換成我們可以使用的model(其實是把Schema編譯成model,所以對于Schema的一切定義都要在compile之前完成)。也就是說model才是我們可以進行操作的handle。
由Schema構造生成的模型,除了Schema定義的數據庫骨架以外,還具有數據庫操作的行為,類似于管理數據屬性、行為的類。

var Blog = mongoose.model('Blog', blogSchema);//編譯model

這樣我們就獲得了一個名為Blog的model了。生成model的同時MongoDB中對應的collection也被建立了,model的名字是Blog,而collection的名字被默認是model名字的復數也就是blogs(細心的小伙伴會發現不止變復數了,而且字母全部變小寫了,親測是這樣的)。【由Schema發布生成的模型,具有抽象屬性和行為的數據庫操作對】

//創建模型,可以用它來操作數據庫中的person集合,指的是整體。創建一個person集合
var PersonModel = db.model("person", PersonSchema);

person:數據庫中的集合名稱,當我們對其添加數據時如果person已經存在,則會保存到其目錄下,如果未存在,則會創建person集合,然后再保存數據。有了model,也就有了操作數據的能力。創建一個Model模型,需要指定兩點:1,集合名稱;2,集合的Schema結構對象。滿足這兩點,就可以操作數據庫啦。

5、Schema和model的理解
不同于關系型數據庫,MongoDB作為文檔型數據庫,Scheme、model、collection、document是其中的四大元素。document是MongoDB里的基本存儲單位,collection是眾多同類document的集合。Schema定義了一類document的模板,讓這一類document在數據庫中有一個具體的構成、存儲模式。而Schema僅僅是定義了Document是什么樣子的,至于生成document和對document進行各種操作(增刪改查)則是通過相對應的model來進行的。

????需要說明的是MongoDB中實際上只有collection和document,Schema和model不過是定義和生成前二者過程中的工具而已。

6、入門案例

//2 加載模塊
var mongoose = require("mongoose");
//3. 連接數據庫 mongod 服務器端  mongo客戶端
//數據庫的名稱可以是不存在 創建一個zf數據庫
var db = mongoose.connect("mongodb://123.57.143.189:27017/zf");
//如果連接成功會執行error回調
db.connection.on("error", function (error) {
    console.log("數據庫連接失敗:" + error);
});
//如果連接成功會執行open回調
db.connection.on("open", function () {
    console.log("數據庫連接成功");
});
//定義一個 schema,描述此集合里有哪些字段,字段是什么類型
//只有schema中有的屬性才能被保存到數據庫中
var PersonSchema = new mongoose.Schema({
    name : { type:String },
    home : { type:String },
    age  : { type:Number, default:0 },
    time : { type:Date, default:Date.now },
    email: { type:String,default:''}
});
//創建模型,可以用它來操作數據庫中的person集合,指的是整體
var PersonModel = db.model("person", PersonSchema);

//根據模型創建實體,是指的個體對象
var personEntity = new PersonModel({
    name : "zf",
    age  : 6,
    email: "zf@qq.com",
    home:'beijing'
});
//用save 方法把自己保存到數據庫中
personEntity.save(function(error,doc){
    if(error){
        console.log("error :" + error);
    }else{
        console.log(doc);
    }
});

7、mongoose基礎操作
①查詢:

db.Userl.find({conditions}, {options}, callback)
conditions Object類型 //查詢條件
options Object 類型 //查詢配置參數
callback Function //回調
db.teacher.find().pretty()  //加上pretty,返回結果更加易讀(在命令行展示效果)

查詢分為多種類型,如條件查詢、過濾查詢等。options省略或為null,則返回所有屬性;options中把需要顯示的屬性設置為大于零的數則返回該屬性,_id不指定默認返回,設置_id為0則不返回該屬性,其他字段不指定,默認不返回

PersonModel.find({},function(error,docs){
    //conditions為空就顯示模型下所有數據
})
// 查詢Article模型下所有數據
db.Article.find({}, function(err, docs){ 
    if (err) {
            console.log('出錯'+ err);
            return;
    }
    res.json(docs); // 以json格式輸出
});

MPersonModel不需要new了,通過var PersonModel = db.model("person", PersonSchema);獲取之后可以馬上使用了。Schema對象需要new一下。
查詢就是返回一個集合中文檔的子集,mongoose模型提供了find、findOne和findById方法用于文檔查詢
findOne查詢單條,當查詢到一個符合條件的數據時,就會停止繼續查詢并返回查詢結果。

//創建模型,可以用它來操作數據庫中的person集合,指的是整體
var PersonModel = db.model("person", PersonSchema);
//指定返回的字段 1表示 返回 0 不返回 ,,
//如果不指定的字段默認不返回
//_id如果不指定也會返回,如果不想讓他返回需要顯式指定為0
PersonModel.find({},{name:1, age:1, _id:0},function(err,docs){   //find返回的是所有的數據,格式是一個數組,數組里面的每一項是一個json
    console.log(docs);
})
//當找到第一條匹配的記錄時就立刻返回,不再繼續查找了,返回單個對象
 //findOne返回的是匹配到的第一條數據,格式是一個json
PersonModel.findOne({name:/^\w+9$/},{name:1, age:1, _id:0},function(err,doc){
    console.log(doc);
})
//按照ID進行查詢
PersonModel.findById('56ee117356acb568054dd6d4',{name:1, age:1, _id:0},function(err,doc){
    console.log(doc);
})

②保存||增加
save是一個實例方法,使用時需要先 new Model() 來實例化

//根據模型創建實體,是指的個體對象
var personEntity = new PersonModel({
    name : "zf",
    age  : 6,
    email: "zf@qq.com",
    home:'beijing'
});
//用save 方法把自己保存到數據庫中
personEntity.save(function(error,doc){
    if(error){
        console.log("error :" + error);
    }else{
        console.log(doc);
    }
});
//保存一個用戶信息,userobj為你創建的文檔對象模型里的字段,需正確對應傳入
const userobj={
    email: query,
    passworld: req.body.passworld,
    hash: hash,
    isregister: false,
    score: 5,
    sign: [],
    signdate: ''
}
new db.MUser(userobj).save(function(error){
    if (error) {
        res.status(500).send()
        return
    }
    res.json({statu: 200})
})

③數據更新
Model.update(查詢條件,更新對象,callback) 默認更新一條文檔,若想全部更新,需要加上{multi:true}

//創建模型,可以用它來操作數據庫中的person集合,指的是整體
var PersonModel = db.model("person", PersonSchema);
//$set更新器 指定要更新的字段
var update = {$set : { age : 100 }};
//更新
//multi 更新匹配到的所有的記錄
PersonModel.update({name : 'zf'}, update,{multi:true}, function(error){
    if(error) {
        console.log(error);
    } else {
        console.log('Update success!');
    }
});

// 更新指定email字段數據條目下字段為content的內容,如果不存在就創建該字段
db.Share.update({email: email},{$set:{content: newarr}}, function(err, docs){
    if (err) {
            res.status(500).send();
            return
    }
    res.json({statu: 200});
})

//$set 指定字段的值,這個字段不存在就創建它。可以是任何MondoDB支持的類型。
Article.update({_id : id}, {$set : {views : 51, title : ‘修改后的標題’ …}})

//$unset 同上取反,刪除一個字段
Article.update({views : 50}, {$unset : {views : ‘remove’}})
//執行后: views字段不存在

//$inc 增減修改器,只對數字有效。
Article.update({_id : id}, {$inc : {views : 1}})

//$push 為字段為數組的內容push數據
Article.update({_id : id}, {$push : {message : messageobj}})

//$pop從頭部或尾部刪除單個元素(1為從后面刪除,-1為從前面刪除)
db.Article.update(({_id: id), {$pop:{relationships: -1})

//__$pull__刪除滿足條件的元素,不止刪除一個
db.Article.update(({_id: id), {$pull:{“relationships”:{“fname”:”dongren”, ”lname”: ”zeng”}}})

④數據刪除
Model.remove(查詢條件,callback)

PersonModel.remove({name:'zf'},function(err,docs){
    //result: { ok: 1, n: 3 }
    console.log(docs);
});

db.Course.remove({_id: req.body.id}, function(err, docs){
    if (err) {
            res.status(500).send();
            return
    }
    res.json({statu: 200})
})

⑤Limit()
limit()方法接受一個數字參數,該參數指定從MongoDB中讀取的記錄條數。
只顯示兩條記錄:db.student.find().limit(2).pretty() //顯示student集合中前兩條記錄
limit()中number值為空時代表全部查出
⑥skip()
skip()方法來跳過指定數量的數據,skip方法同樣接受一個數字參數作為跳過的記錄條數。
跳過前三條記錄:db.student.find().pretty().skip(3)
只顯示第4條記錄:db.student.find().pretty().limit(1).skip(3) 或者 db.student.find().pretty().skip(3).limit(1)
⑦排序sort()
sort()方法可以通過參數指定排序的字段,并使用 1 和 -1 來指定排序的方式,其中 1 為升序排列,而-1是用于降序排列。
db.COLLECTION_NAME.find().sort({KEY:1})
將Student集合中的文檔按照年齡升序排列:db.student.find().sort({age:1})
【注意】skip()與limit()的前后順序沒有要求,不管怎么放置他們執行的順序都是先sort()后skip()最后limit()
⑧count
計算數據庫總數據數目
⑨⑩??

十、使用可視化圖形軟件robomongo:
MongoDB教程

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

托克逊县| 天长市| 温宿县| 呼玛县| 济南市| 莆田市| 肃宁县| 峨眉山市| 西华县| 科尔| 太湖县| 沾益县| 额尔古纳市| 通化市| 习水县| 临城县| 蒙阴县| 广东省| 青龙| 托克托县| 舒城县| 茂名市| 禹州市| 长宁县| 威远县| 江口县| 平原县| 邵武市| 留坝县| 田林县| 凭祥市| 江都市| 澎湖县| 余干县| 囊谦县| 宾阳县| 宁晋县| 漳浦县| 莎车县| 浙江省| 临桂县|