mongoDB(mac下安裝配置)

一、安裝

使用 curl 命令來下載安裝:

# 進入 /usr/local
cd /usr/local

# 下載
sudo curl -O https://fastdl.mongodb.org/osx/mongodb-osx-x86_64-3.4.2.tgz

# 解壓
sudo tar -zxvf mongodb-osx-x86_64-3.4.2.tgz

# 重命名為 mongodb 目錄
sudo mv mongodb-osx-x86_64-3.4.2 mongodb

安裝完成后监憎,把 MongoDB 的二進制命令文件目錄(安裝目錄/bin)添加到 PATH 路徑中:

export PATH=/usr/local/mongodb/bin:$PATH

二若皱、運行 MongoDB

1运吓、首先創(chuàng)建一個數(shù)據(jù)庫存儲目錄 /data/db:

sudo mkdir -p /data/db

2、啟動 mongodb兄春,默認數(shù)據(jù)庫目錄即為 /data/db:

sudo mongod

# 如果沒有創(chuàng)建全局路徑 PATH澎剥,需要進入以下目錄
cd /usr/local/mongodb/bin
sudo ./mongod

3 、再打開一個終端進入執(zhí)行以下命令:

$ cd /usr/local/mongodb/bin 
$ ./mongo
MongoDB shell version v3.4.2
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.2
Welcome to the MongoDB shell.
……
> 1 + 1
2
> 
//控制臺輸出赶舆,不再使用console.log('巴拉巴拉'),而是使用print('巴拉巴拉')

三哑姚、常用命令

1、 創(chuàng)建數(shù)據(jù)庫芜茵、切換數(shù)據(jù)庫 use DATABASE_NAME
如果數(shù)據(jù)庫不存在叙量,則創(chuàng)建數(shù)據(jù)庫,否則切換到指定數(shù)據(jù)庫九串。以下實例我們創(chuàng)建了數(shù)據(jù)庫 runoob:

> use runoob
switched to db runoob
> db
runoob
> 

2绞佩、查看所有數(shù)據(jù)庫 show dbs

> show dbs
local  0.078GB
test   0.078GB
> 

3、查看當前在那個數(shù)據(jù)庫猪钮,避免進錯庫 db

> db
runoob

4品山、查看數(shù)據(jù)庫版本命令:db.version()

> db.version()
3.4.2

5、創(chuàng)建集合 db.createCollection(name, options)

> db.createCollection("mycol", { capped : true, 
autoIndexId : true, 
size :6142800, max : 10000 } )

7烤低、查看已有集合 show collections

> show collections
mycol

在 MongoDB 中肘交,也可以不集合。插入一些文檔時扑馁,MongoDB 會自動創(chuàng)建集合

> db.mycol2.insert({"name" : "qianxm"})

> show collections
mycol
mycol2

8涯呻、刪除

db.集合.remove(條件) #刪除文件數(shù)據(jù)
db.集合.drop() #刪除整個集合
db.dropDatabase() #刪除整個數(shù)據(jù)庫

//demo
> db.mycol2.drop() #刪除
true
> show collections  #查看集合列表發(fā)現(xiàn)已經(jīng)刪除
mycol

9、插入文檔 db.COLLECTION_NAME.insert(document)

>db.col.insert({title: 'MongoDB 呀', 
    description: 'MongoDB 是一個 Nosql 數(shù)據(jù)庫',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
})

WriteResult({ "nInserted" : 1 })

也可以將數(shù)據(jù)定義為一個變量

> document=({title: 'MongoDB ', 
    description: 'MongoDB 是一個 Nosql 數(shù)據(jù)庫',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
});

> db.col.insert(document)

#  插入單條數(shù)據(jù)
#  插入單條數(shù)據(jù)

> var document = db.collection.insertOne({"a": 3})
> document
{
        "acknowledged" : true,
        "insertedId" : ObjectId("571a218011a82a1d94c02333")
}

#  插入多條數(shù)據(jù)
> var res = db.collection.insertMany([{"b": 3}, {'c': 4}])
> res
{
        "acknowledged" : true,
        "insertedIds" : [
                ObjectId("571a22a911a82a1d94c02337"),
                ObjectId("571a22a911a82a1d94c02338")
        ]
}

10檐蚜、查看已插入文檔 db.col.find()

> db.col.find()

{ "_id" : ObjectId("5ab4da883abaceb3faebc0f5"), "title" : "MongoDB 呀", "description" : "MongoDB 是一個 Nosql 數(shù)據(jù)庫", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }

>db.col.findOne() //查詢第一條記錄
>

11魄懂、更新文檔 db.集合.update({查詢},{修改})

db.collection.update(
  <query>,
  <update>,
  {
    upsert: <boolean>,
    multi: <boolean>,
    writeConcern: <document>
  }
)
//query : update的查詢條件,類似sql update查詢內(nèi)where后面的闯第。
//update : update的對象和一些更新的操作符(如$,$inc...)等市栗,也可以理解為sql update查詢內(nèi)set后面的
//upsert : 可選,這個參數(shù)的意思是咳短,如果不存在update的記錄填帽,是否插入objNew,true為插入,默認是false咙好,不插入篡腌。
//multi : 可選,mongodb 默認是false,只更新找到的第一條記錄勾效,如果這個參數(shù)為true,就把按條件查出來多條記錄全部更新嘹悼。
//writeConcern :可選叛甫,拋出異常的級別。

//修改多條相同的文檔杨伙,需要設(shè)置 multi 參數(shù)為 true其监。
db.col.update({'title':'MongoDB '},{$set:{'title':'MongoDB'}},{multi:true})

//只更新第一條記錄:
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.test_collection.updateOne({"name":"abc"},{$set:{"age":"28"}})

//更新多個文檔
db.test_collection.updateMany({"age":{$gt:"10"}},{$set:{"status":"xyz"}})

12、刪除文檔 db.collection.remove()

db.collection.remove(
   <query>,
   <justOne>
)
//query :(可選)刪除的文檔的條件限匣。
//justOne : (可選)如果設(shè)為 true 或 1抖苦,則只刪除一個文檔。
//writeConcern :(可選)拋出異常的級別米死。


//移除 title 為 'MongoDB' 的所有文檔
db.col.remove({'title':'MongoDB '})

//移除 title 為 'MongoDB' 的第一條記錄
db.col.remove({'title':'MongoDB '},1)

//新方法
//刪除 status 等于 A 的全部文檔:
db.inventory.deleteMany({ status : "A" })

//刪除 status 等于 D 的一個文檔:
db.inventory.deleteOne( { status: "D" } )

13锌历、查詢文檔

db.collection.find(query, projection)
//query :可選,使用查詢操作符指定查詢條件
//projection :可選峦筒,使用投影操作符指定返回的鍵究西。查詢時返回文檔中所有鍵值, 只需省略該參數(shù)即可(默認省略)勘天。

//要以易讀的方式來讀取數(shù)據(jù)怔揩,可以使用 pretty() 方法
db.col.find().pretty()

查詢條件 where

MongoDB 與 RDBMS Where 語句比較

查詢條件 AND

//MongoDB 的 find() 方法可以傳入多個鍵(key),每個鍵(key)以逗號隔開脯丝,即常規(guī) SQL 的 AND 條件
db.col.find({key1:value1, key2:value2}).pretty()

查詢條件 OR

//MongoDB OR 條件語句使用了關(guān)鍵字 $or
db.col.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()

AND 和 OR 聯(lián)合使用

//以下演示了 AND 和 OR 聯(lián)合使用商膊,類似常規(guī) SQL 語句為: 'where likes>50 AND (by = '栗子' OR title = 'MongoDB ')'

>db.col.find({"likes": {$gt:50}, $or: [{"by": "栗子"},{"title": "MongoDB "}]}).pretty()

projection 參數(shù)的使用方法

//若不指定 projection,則默認返回所有鍵宠进,指定 projection 格式如下晕拆,有兩種模式

db.collection.find(query, {title: 1, by: 1}) // inclusion模式 指定返回的鍵,不返回其他鍵
db.collection.find(query, {title: 0, by: 0}) // exclusion模式 指定不返回的鍵,返回其他鍵

//兩種模式不可混用(因為這樣的話無法推斷其他鍵是否應(yīng)返回)
db.collection.find(query, {title: 1, by: 0}) // 錯誤
//只能全1或全0材蹬,除了在inclusion模式時可以指定_id為0
db.collection.find(query, {_id:0, title: 1, by: 1}) // 正確

14实幕、條件操作符 大于 小于

$gt -------- greater than  >

$gte --------- gt equal  >=

$lt -------- less than  <

$lte --------- lt equal  <=

$ne ----------- not equal  !=

$eq  --------  equal  =

15、 $type 操作符
MongoDB 中可以使用的類型如下表所示:

image.png
//如想獲取 "col" 集合中 title 為 String 的數(shù)據(jù)堤器,可以使用以下命令:

db.col.find({"title" : {$type : 2}})

16昆庇、Limit與Skip方法
如果需要在MongoDB中讀取指定數(shù)量的數(shù)據(jù)記錄,可以使用MongoDB的Limit方法闸溃,limit()方法接受一個數(shù)字參數(shù)整吆,該參數(shù)指定從MongoDB中讀取的記錄條數(shù)。

limit()方法基本語法如下所示:

db.COLLECTION_NAME.find().limit(NUMBER)


//比如顯示查詢文檔中的兩條記錄
> db.col.find({},{"title":1,_id:0}).limit(2)
{ "title" : "PHP 教程" }
{ "title" : "Java 教程" }
//如果沒有指定limit()方法中的參數(shù)則顯示集合中的所有數(shù)據(jù)辉川。

除了可以使用limit()方法來讀取指定數(shù)量的數(shù)據(jù)外表蝙,還可以使用skip()方法來跳過指定數(shù)量的數(shù)據(jù),skip方法同樣接受一個數(shù)字參數(shù)作為跳過的記錄條數(shù)乓旗。

skip() 方法腳本語法格式如下:

db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

//以下實例只會顯示第二條文檔數(shù)據(jù)
>db.col.find({},{"title":1,_id:0}).limit(1).skip(1)
{ "title" : "Java 教程" }
>
注:skip()方法默認參數(shù)為 0 

17府蛇、排序 sort()方法
使用sort()方法對數(shù)據(jù)進行排序,sort()方法可以通過參數(shù)指定排序的字段屿愚,并使用 1 和 -1 來指定排序的方式汇跨,其中 1 為升序排列务荆,而-1是用于降序排列。

sort()方法基本語法如下:

db.COLLECTION_NAME.find().sort({KEY:1})

//col 集合中的數(shù)據(jù)如下:
{ "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一種創(chuàng)建動態(tài)交互性站點的強有力的服務(wù)器端腳本語言扰法。", "url" : "http://www.runoob.com", "tags" : [ "php" ], "likes" : 200 }
{ "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高級程序設(shè)計語言蛹含。", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 }
{ "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一個 Nosql 數(shù)據(jù)庫", "url" : "http://www.runoob.com", "tags" : [ "mongodb" ], "likes" : 100 }
// col 集合中的數(shù)據(jù)按字段 likes 的降序排列:
>db.col.find({},{"title":1,_id:0}).sort({"likes":-1})
{ "title" : "PHP 教程" }
{ "title" : "Java 教程" }
{ "title" : "MongoDB 教程" }
>

skip(), limilt(), sort()三個放在一起執(zhí)行的時候,執(zhí)行的順序是先 sort(), 然后是 skip()塞颁,最后是顯示的 limit()。

18吸耿、 索引 ensureIndex() 方法

索引通常能夠極大的提高查詢的效率祠锣,如果沒有索引,MongoDB在讀取數(shù)據(jù)時必須掃描集合中的每個文件并選取那些符合查詢條件的記錄咽安。
這種掃描全集合的查詢效率是非常低的伴网,特別在處理大量的數(shù)據(jù)時,查詢可以要花費幾十秒甚至幾分鐘妆棒,這對網(wǎng)站的性能是非常致命的澡腾。
索引是特殊的數(shù)據(jù)結(jié)構(gòu),索引存儲在一個易于遍歷讀取的數(shù)據(jù)集合中糕珊,索引是對數(shù)據(jù)庫表中一列或多列的值進行排序的一種結(jié)構(gòu)

MongoDB使用 ensureIndex() 方法來創(chuàng)建索引动分。基本語法格式如下所示:

db.COLLECTION_NAME.ensureIndex({KEY:1})
//語法中 Key 值為要創(chuàng)建的索引字段红选,1為指定按升序創(chuàng)建索引澜公,如果想按降序來創(chuàng)建索引指定為-1即可。

//示例
db.col.ensureIndex({"title":1})

ensureIndex() 方法中也可以設(shè)置使用多個字段創(chuàng)建索引(關(guān)系型數(shù)據(jù)庫中稱作復合索引)喇肋。

db.col.ensureIndex({"title":1,"description":-1})

//后臺創(chuàng)建索引:通過在創(chuàng)建索引時加background:true 的選項坟乾,讓創(chuàng)建工作在后臺執(zhí)行
db.col.ensureIndex({open: 1, close: 1}, {background: true})
ensureIndex() 可選參數(shù)列表

19、聚合 aggregate() 方法
aggregate() 方法的基本語法格式如下所示:

db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

//如 
> db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
{
   "result" : [
      {
         "_id" : "runoob.com",
         "num_tutorial" : 2
      },
      {
         "_id" : "Neo4j",
         "num_tutorial" : 1
      }
   ],
   "ok" : 1
}
//以上實例類似sql語句: select by_user, count(*) from mycol group by by_user
//通過字段by_user字段對數(shù)據(jù)進行分組蝶防,并計算by_user字段相同值的總和甚侣。
聚合的表達式

管道的概念

管道在Unix和Linux中一般用于將當前命令的輸出結(jié)果作為下一個命令的參數(shù)。
MongoDB的聚合管道將MongoDB文檔在一個管道處理完畢后將結(jié)果傳遞給下一個管道處理间学。管道操作是可以重復的殷费。
表達式:處理輸入文檔并輸出。表達式是無狀態(tài)的菱鸥,只能用于計算當前聚合管道的文檔宗兼,不能處理其它的文檔。

聚合框架中常用的幾個管道操作:

project:修改輸入文檔的結(jié)構(gòu)氮采∫笊埽可以用來重命名、增加或刪除域鹊漠,也可以用于創(chuàng)建計算結(jié)果以及嵌套文檔主到。match:用于過濾數(shù)據(jù)茶行,只輸出符合條件的文檔。match使用MongoDB的標準查詢操作登钥。limit:用來限制MongoDB聚合管道返回的文檔數(shù)畔师。
skip:在聚合管道中跳過指定數(shù)量的文檔,并返回余下的文檔牧牢。unwind:將文檔中的某一個數(shù)組類型字段拆分成多條看锉,每條包含數(shù)組中的一個值。
group:將集合中的文檔分組塔鳍,可用于統(tǒng)計結(jié)果伯铣。sort:將輸入文檔排序后輸出。
$geoNear:輸出接近某一地理位置的有序文檔轮纫。

管道操作符實例

1腔寡、$project實例
db.article.aggregate(
    { $project : {
        title : 1 ,
        author : 1 ,
    }}
 );
這樣的話結(jié)果中就只還有_id,tilte和author三個字段了,默認情況下_id字段是被包含的掌唾,如果要想不包含_id話可以這樣:

db.article.aggregate(
    { $project : {
        _id : 0 ,
        title : 1 ,
        author : 1
    }});

2.$match實例
db.articles.aggregate( [
                        { $match : { score : { $gt : 70, $lte : 90 } } },
                        { $group: { _id: null, count: { $sum: 1 } } }
                       ] );
$match用于獲取分數(shù)大于70小于或等于90記錄放前,然后將符合條件的記錄送到下一階段$group管道操作符進行處理。

3.$skip實例
db.article.aggregate(
    { $skip : 5 });
經(jīng)過$skip管道操作符處理后糯彬,前五個文檔被"過濾"掉凭语。

20、MongoDB 復制(副本集)

MongoDB復制是將數(shù)據(jù)同步在多個服務(wù)器的過程情连。
復制提供了數(shù)據(jù)的冗余備份叽粹,并在多個服務(wù)器上存儲數(shù)據(jù)副本,提高了數(shù)據(jù)的可用性却舀, 并可以保證數(shù)據(jù)的安全性虫几。
復制還允許從硬件故障和服務(wù)中斷中恢復數(shù)據(jù)。

MongoDB復制原理

mongodb的復制至少需要兩個節(jié)點挽拔。其中一個是主節(jié)點辆脸,負責處理客戶端請求,其余的都是從節(jié)點螃诅,負責復制主節(jié)點上的數(shù)據(jù)啡氢。
mongodb各個節(jié)點常見的搭配方式為:一主一從、一主多從术裸。
主節(jié)點記錄在其上的所有操作oplog倘是,從節(jié)點定期輪詢主節(jié)點獲取這些操作,然后對自己的數(shù)據(jù)副本執(zhí)行這些操作袭艺,從而保證從節(jié)點的數(shù)據(jù)與主節(jié)點一致搀崭。
MongoDB復制結(jié)構(gòu)圖如下所示:


MongoDB復制結(jié)構(gòu)圖

客戶端從主節(jié)點讀取數(shù)據(jù),在客戶端寫入數(shù)據(jù)到主節(jié)點時猾编, 主節(jié)點與從節(jié)點進行數(shù)據(jù)交互保障數(shù)據(jù)的一致性瘤睹。

副本集特征:

N 個節(jié)點的集群
任何節(jié)點可作為主節(jié)點
所有寫入操作都在主節(jié)點上
自動故障轉(zhuǎn)移
自動恢復

四升敲、js操作mongoDB

1、新建 mongoShell/goTask.js

var userName = "qianxm"; //聲明一個登錄名             
var timeStamp = Date.parse(new Date()); //聲明登錄時的時間戳  
var jsonDdatabase = {
    "loginUser": userName,
    "loginTime": timeStamp
}; //組成JSON字符串
var db = connect('log'); //鏈接數(shù)據(jù)庫
db.login.insert(jsonDdatabase); //插入數(shù)據(jù)

print('[demo]log  print success'); //沒有錯誤顯示成功

然后在 mongoShell目錄下執(zhí)行

mongo goTask.js
//localhost:mongoShell qianxuemin$ mongo goTask.js

五轰传、可視化工具 Robo 3T

登錄命令 db.auth('qxm','123456')

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末驴党,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子获茬,更是在濱河造成了極大的恐慌港庄,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锦茁,死亡現(xiàn)場離奇詭異攘轩,居然都是意外死亡,警方通過查閱死者的電腦和手機码俩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來歼捏,“玉大人稿存,你說我怎么就攤上這事⊥啵” “怎么了瓣履?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長练俐。 經(jīng)常有香客問我袖迎,道長,這世上最難降的妖魔是什么腺晾? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任燕锥,我火速辦了婚禮,結(jié)果婚禮上悯蝉,老公的妹妹穿的比我還像新娘归形。我一直安慰自己,他們只是感情好鼻由,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布暇榴。 她就那樣靜靜地躺著,像睡著了一般蕉世。 火紅的嫁衣襯著肌膚如雪蔼紧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天狠轻,我揣著相機與錄音奸例,去河邊找鬼。 笑死哈误,一個胖子當著我的面吹牛哩至,可吹牛的內(nèi)容都是我干的躏嚎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼菩貌,長吁一口氣:“原來是場噩夢啊……” “哼卢佣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起箭阶,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤虚茶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后仇参,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嘹叫,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年诈乒,在試婚紗的時候發(fā)現(xiàn)自己被綠了罩扇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡怕磨,死狀恐怖喂饥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情肠鲫,我是刑警寧澤员帮,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站导饲,受9級特大地震影響捞高,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜渣锦,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一硝岗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧泡挺,春花似錦辈讶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至媳溺,卻和暖如春月幌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背悬蔽。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工扯躺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓录语,卻偏偏與公主長得像倍啥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子澎埠,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容