MongoDB學(xué)習(xí)總結(jié)(一)

1. MongoDB 簡介

MongoDB是一個可擴(kuò)展的高性能,開源,模式自由,面向文檔的NoSQL,基于分布式文件存儲由 C++ 語言編寫,設(shè)計之初旨在為 WEB 應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲解決方案。

2. MongoDB特點

模式自由 :可以把不同結(jié)構(gòu)的文檔存儲在同一個數(shù)據(jù)庫里

面向集合的存儲:適合存儲 JSON風(fēng)格文件的形式,

完整的索引支持:對任何屬性可索引,

復(fù)制和高可用性:支持服務(wù)器之間的數(shù)據(jù)復(fù)制,支持主-從模式及服務(wù)器之間的相互復(fù)制。復(fù)制的主要目的是提供冗余及自動故障轉(zhuǎn)移。

自動分片:支持水平的數(shù)據(jù)庫集群,可動態(tài)添加額外的機(jī)器。

豐富的查詢:支持豐富的查詢表達(dá)方式,查詢指令使用JSON形式的標(biāo)記,可輕易查詢文檔中的內(nèi)嵌的對象及數(shù)組。

快速就地更新:查詢優(yōu)化器會分析查詢表達(dá)式,并生成一個高效的查詢計劃。

高效的傳統(tǒng)存儲方式:支持二進(jìn)制數(shù)據(jù)及大型對象(如圖片等...)。

3. MongoDB與SQL區(qū)別

MongoDB與SQL區(qū)別??

4. 適用場景

網(wǎng)站數(shù)據(jù): 適合實時的插入,更新與查詢,并具備網(wǎng)站實時數(shù)據(jù)存儲所需的復(fù)制及高度伸縮性。

緩存: 由于性能很高,也適合作為信息基礎(chǔ)設(shè)施的緩存層。在系統(tǒng)重啟之后,搭建的持久化緩存可以避免下層的數(shù)據(jù)源過載。

大尺寸、低價值的數(shù)據(jù): 使用傳統(tǒng)的關(guān)系數(shù)據(jù)庫存儲一些數(shù)據(jù)時可能會比較貴,在此之前,很多程序員往往會選擇傳統(tǒng)的文件進(jìn)行存儲。

高伸縮性的場景: 非常適合由數(shù)十或者數(shù)百臺服務(wù)器組成的數(shù)據(jù)庫。

用于對象及JSON數(shù)據(jù)的存儲: MongoDB的BSON數(shù)據(jù)格式非常適合文檔格式化的存儲及查詢。

5. MongoDB的安裝與使用

1. MongoDB官網(wǎng)安裝包下載地址:http://www.mongodb.org/downloads

MongoDB安裝文檔:https://docs.mongodb.com/getting-started/shell/installation/

Ubuntu下安裝MongoDB:

python@ubuntu:~$ sudo apt-get install mongodb

注意:使用MongoDB,需要先啟動服務(wù)端,再使用客戶端連接數(shù)據(jù)庫。

2. 服務(wù)端

MongoDB 默認(rèn)的存儲數(shù)據(jù)目錄為 /data/db,默認(rèn)端口27017

服務(wù)的命令為mongod,可以通過help查看所有參數(shù)

python@ubuntu:~$ mongod --help

相關(guān)文件存放路徑:默認(rèn)各個文件存放路徑如下所示:

可執(zhí)行文件存放路徑:/usr/bin/mongod和/usr/bin/mongo

數(shù)據(jù)庫文件存放路徑:/data/db

日志文件存放路徑:/var/log/mongodb/mongod.log

配置文件存放路徑:/etc/mongod.conf

3. 啟動注意事項

1. 首次啟動:

啟動MongoDB服務(wù):sudo mongod

報出如下錯誤,表示默認(rèn)的存儲數(shù)據(jù)目錄 /data/db 不存在:

[initandlisten] exception in initAndListen: 29 Data directory /data/db not found., terminating

創(chuàng)建 /data目錄和 /data/db 目錄,并指定 讀/寫/執(zhí)行 權(quán)限

python@ubuntu:~$ sudo mkdir -p /data/db

python@ubuntu:~$ sudo chmod777/data/db

2. 再次啟動:

再次啟動MongoDB服務(wù):sudo mongod

啟動成功,但是可能會有三個warning的警告

Warning 1:

[initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.[initandlisten] ** We suggest setting it to 'never'[initandlisten][initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.[initandlisten] ** We suggest setting it to 'never'

Linux的內(nèi)存分配默認(rèn)由內(nèi)核動態(tài)分配,而不是由程序自行管理。而MongoDB對內(nèi)存占用有那么點...嚴(yán)重,所以為了防止MongoDB占用內(nèi)存過大而被內(nèi)核"管理",官方推薦關(guān)閉動態(tài)分配。

默認(rèn)"always"表示允許動態(tài)分配,對應(yīng)的"never"就是不允許,所以我們將這兩個文件內(nèi)容修改為"naver"后就沒有warning了。

# Ctrl + c 退出 MongoDB 數(shù)據(jù)庫服務(wù)# 然后進(jìn)入 root 用戶下,執(zhí)行修改命令python@ubuntu:~$ sudo su[sudo] python 的密碼: root@ubuntu:~# sudo echo "never" > /sys/kernel/mm/transparent_hugepage/enabledroot@ubuntu:~# sudo echo "never" >? /sys/kernel/mm/transparent_hugepage/defrag

實際上,除非網(wǎng)站DBA對數(shù)據(jù)庫性能有極限要求,在通常情況下系統(tǒng)動態(tài)分配的內(nèi)存頁大小足夠我們正常使用,而且更能優(yōu)化整個系統(tǒng),所以一般不必理會這個warning。而且這樣只是臨時修改Linux內(nèi)核的設(shè)置,在Linux服務(wù)器重啟后則會失效。

Warning 2:

[initandlisten] ** WARNING: soft rlimits too low.rlimits set to 1024 processes, 64000 files. Number of processes should be at least 32000 : 0.5 times number of files.

這個WARNING(如果有的話)含義為: 表示默認(rèn)分配給MongoDB的進(jìn)程和文件數(shù)量限制過低,需要重新分配值:

mongodb當(dāng)前限制:1024 processes, 64000 files

mongodb建議要求:processes = 0.5*files=32000(至少)

咱們學(xué)習(xí)階段默認(rèn)用不著這么多的進(jìn)程和文件,所以也可以不必理會。

# 打開 相關(guān)配置文件:root@ubuntu:~# vi /etc/security/limits.conf# 在打開的 文件最下方,添加,然后保存退出mongod? soft? nofile64000mongod? hard? nofile64000mongod? soft? nproc32000mongod? hard? nproc32000

Warning 3:

[initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.

意思是我們在用root權(quán)限做這些事,理論上是不安全的。我們可以通過附加--auth參數(shù),來使用用戶認(rèn)證來處理這個情況,這個后面會講到。

3. 再再次啟動:

再再次啟動MongoDB服務(wù):sudo mongod

啟動后查看進(jìn)程,以確定是否啟動成功

python@ubuntu:~$ ps aux | grep mongod

如果進(jìn)程中沒有mongod的項則沒有啟動成功,可以通過查看日志來確定錯誤原因,默認(rèn)日志文件為/var/log/mongodb/mongod.log,最新的信息在最后面顯示。

4. 客戶端

客戶端命令為mongo,可以通過help查看所有參數(shù)。

這個shell即是mongodb的客戶端,用來對MongoDB進(jìn)行操作和管理的交互式環(huán)境。

python@ubuntu:~$ mongo --help

終端退出連接

> exit

6. MongoDB數(shù)據(jù)庫命令

1、連接成功后,默認(rèn)使用test數(shù)據(jù)庫

查看當(dāng)前數(shù)據(jù)庫名稱

db

2、查看所有數(shù)據(jù)庫名稱,列出所有在物理上存在的數(shù)據(jù)庫

show dbs

3、切換數(shù)據(jù)庫,如果數(shù)據(jù)庫不存在也并不創(chuàng)建,直到插入數(shù)據(jù)或創(chuàng)建集合時數(shù)據(jù)庫才被創(chuàng)建

use 數(shù)據(jù)庫名稱

4、刪除當(dāng)前指向的數(shù)據(jù)庫,如果數(shù)據(jù)庫不存在,則什么也不做

db.dropDatabase()

7. MongoDB集合命令

創(chuàng)建語法如下:

name是要創(chuàng)建的集合的名稱

options是一個文檔,用于指定集合的配置,選項??參數(shù)是可選的,所以只需要到指定的集合名稱

可以不手動創(chuàng)建集合,向不存在的集合中第一次加入數(shù)據(jù)時,集合會被創(chuàng)建出來

db.createCollection(name, options)

例1:不限制集合大小

db.createCollection("stu")

例2:限制集合大小,后面學(xué)會插入語句后可以查看效果

參數(shù)capped:默認(rèn)值為false表示不設(shè)置上限,值為true表示設(shè)置上限

參數(shù)size:當(dāng)capped值為true時,需要指定此參數(shù),表示上限大小,當(dāng)文檔達(dá)到上限時,會將之前的數(shù)據(jù)覆蓋,單位為字節(jié)

db.createCollection("sub", { capped : true, size : 10 } )

查看當(dāng)前數(shù)據(jù)庫的集合

show collections

刪除命令

db.集合名稱.drop()

8.?MongoDB文檔命令

1.MongoDB的數(shù)據(jù)類型

Object ID:文檔ID

String:? 字符串,最常用,必須是有效的UTF-8

Boolean:? 存儲一個布爾值,true或false

Integer:? 整數(shù)可以是32位或64位,這取決于服務(wù)器

Double:? 存儲浮點值

Arrays:? 數(shù)組或列表,多個值存儲到一個鍵

Object:? 用于嵌入式的文檔,即一個值為一個文檔

Null:? ? 存儲Null值

Timestamp:時間戳,表示從1970-1-1到現(xiàn)在的總秒數(shù)

Date:? ? 存儲當(dāng)前日期或時間的UNIX時間格式

創(chuàng)建日期語句如下

注意:參數(shù)的格式為YYYY-MM-DD

new Date('2015-11-11')

object id

每個文檔都有一個屬性,為_id,保證每個文檔的唯一性

可以自己去設(shè)置_id插入文檔

如果沒有提供,那么MongoDB為每個文檔提供了一個獨特的_id,類型為objectID

objectID是一個12字節(jié)的十六進(jìn)制數(shù):

前4個字節(jié)為當(dāng)前時間戳

接下來3個字節(jié)為機(jī)器ID

接下來的2個字節(jié)為MongoDB的服務(wù)進(jìn)程id

最后3個字節(jié)為簡單的增量值

2.?MongoDB的數(shù)據(jù)增刪改查

1、插入語法:

db.集合名稱.insert(document)

插入文檔時,如果不指定_id參數(shù),MongoDB會為文檔分配一個唯一的ObjectId

例1

db.stu.insert({name:'gj',gender:1})

例2

s1={_id:'2015111',name:'hr'}

s1.gender=0

db.stu.insert(s1)

2、更新語法:

db.集合名稱.update(

? ? <query>,

? ? <update>,

?????{multi:boolean<>}

????)

參數(shù)query:查詢條件,類似sql語句update中where部分

參數(shù)update:更新操作符,類似sql語句update中set部分

參數(shù)multi:可選,默認(rèn)是false,表示只更新找到的第一條記錄,

值為true表示把滿足條件的文檔全部更新

例1:全文檔更新

db.stu.update({name:'hr'},{name:'mnc'})

例2:指定屬性更新,通過操作符$set

db.stu.insert({name:'hr',gender:0})

db.stu.update({name:'hr'},{$set:{name:'hys'}})

例3:修改多條匹配到的數(shù)據(jù)

db.stu.update({},{$set:{gender:0}},{multi:true})

3、保存語法:

db.集合名稱.save(document)

如果文檔的_id已經(jīng)存在則修改,如果文檔的_id不存在則添加

例1

db.stu.save({_id:'20160102','name':'yk',gender:1})

例2

db.stu.save({_id:'20160102','name':'wyk'})

4、刪除語法:

db.集合名稱.remove(

? ? query,

????{

????justOne:

????})

參數(shù)query:可選,刪除的文檔的條件

參數(shù)justOne:可選,如果設(shè)為true或1,則只刪除一條,默認(rèn)false,表示刪除多條

例1:只刪除匹配到的第一條

db.stu.remove({gender:0},{justOne:true})

例2:全部刪除

db.stu.remove({})

9. MongoDB數(shù)據(jù)查詢

1、基本查詢:

方法find():查詢

db.集合名稱.find({條件文檔})

方法findOne():查詢,只返回第一個

db.集合名稱.findOne({條件文檔})

方法pretty():將結(jié)果格式化

db.集合名稱.find({條件文檔}).pretty()

2、比較運(yùn)算符:

等于,默認(rèn)是等于判斷,沒有運(yùn)算符

小于$lt

小于或等于$lte

大于$gt

大于或等于$gte

不等于$ne

例1:查詢名稱等于'zhangsan'的學(xué)生

db.stu.find({name:'zhangsan'})

例2:查詢年齡大于或等于18的學(xué)生

db.stu.find({age:{$gte:18}})

3、邏輯運(yùn)算符:

查詢時可以有多個條件,多個條件之間需要通過邏輯運(yùn)算符連接

邏輯與:默認(rèn)是邏輯與的關(guān)系

例1:查詢年齡大于或等于18,并且性別為true的學(xué)生

db.stu.find({age:{$gte:18},gender:true})

邏輯或:使用$or,值為數(shù)組,數(shù)組中每個元素為json

例2:查詢年齡大于18,或性別為false的學(xué)生

db.stu.find({$or:[{age:{$gt:18}},{gender:false}]})

and和or一起使用

例3:查詢年齡大于18或性別為true的學(xué)生,并且學(xué)生的姓名為gj

db.stu.find({$or:[{age:{$gte:18}},{gender:true}],name:'gj'})

4、范圍運(yùn)算符:

使用"$in","$nin" 判斷是否在某個范圍內(nèi)

例1:查詢年齡為18、28的學(xué)生

db.stu.find({age:{$in:[18,28]}})

5、支持正則表達(dá)式:

mongodb提供的終端shell,同時也是一個js的執(zhí)行器,可以編寫js的代碼和函數(shù)

使用//或$regex編寫正則表達(dá)式

例1:查詢姓黃的學(xué)生

db.stu.find({name:/^黃/})

db.stu.find({name:{$regex:'^黃'}}})

6、自定義查詢:

使用$where后面寫一個函數(shù)(js函數(shù)),返回滿足條件的數(shù)據(jù)

例1:查詢年齡大于30的學(xué)生

db.stu.find({$where:function(){return this.age>30;}})

10. MongoDB中l(wèi)imit與skip的應(yīng)用

limit

方法limit():用于讀取指定數(shù)量的文檔

語法:

db.集合名稱.find().limit(NUMBER)

參數(shù)NUMBER表示要獲取文檔的條數(shù)

如果沒有指定參數(shù)則顯示集合中的所有文檔

例1:查詢2條學(xué)生信息

db.stu.find().limit(2)

skip

方法skip():用于跳過指定數(shù)量的文檔

語法:

db.集合名稱.find().skip(NUMBER)

參數(shù)NUMBER表示跳過的記錄條數(shù),默認(rèn)值為0

例1:查詢從第3條開始的學(xué)生信息

db.stu.find().skip(2)

方法limit()和skip()可以一起使用,不分先后順序

創(chuàng)建數(shù)據(jù)集

for(i=0;i<15;i++){db.t1.insert({_id:i})}

查詢第5至8條數(shù)據(jù)

db.stu.find().limit(4).skip(5)

db.stu.find().skip(5).limit(4)

11.?MongoDB投影

定義:在查詢到的返回結(jié)果中,只選擇必要的字段,而不是選擇一個文檔的整個字段

如:一個文檔有5個字段,需要顯示只有3個,投影其中3個字段即可

語法:

參數(shù)為字段與值,值為1表示顯示,值為0不顯示

db.集合名稱.find({},{字段名稱:1,...})

對于需要顯示的字段,設(shè)置為1即可,不設(shè)置即為不顯示

特殊:對于_id列默認(rèn)是顯示的,如果不顯示需要明確設(shè)置為0

例1

db.stu.find({},{name:1,gender:1})

例2

db.stu.find({},{_id:0,name:1,gender:1})

12.?MongoDB排序

定義:方法sort(),用于對結(jié)果集進(jìn)行排序

語法

db.集合名稱.find().sort({字段:1,...})

參數(shù)1為升序排列

參數(shù)-1為降序排列

例1:根據(jù)性別降序,再根據(jù)年齡升序

db.stu.find().sort({gender:-1,age:1})

13.?MongoDB統(tǒng)計個數(shù)

定義:方法count()用于統(tǒng)計結(jié)果集中文檔條數(shù)

語法

db.集合名稱.find({條件}).count()

也可以與為

db.集合名稱.count({條件})

例1:統(tǒng)計男生人數(shù)

db.stu.find({gender:true}).count()

例2:統(tǒng)計年齡大于20的男生人數(shù)

db.stu.count({age:{$gt:20},gender:true})

14.?MongoDB消除重復(fù)

方法distinct()對數(shù)據(jù)進(jìn)行去重

語法

db.集合名稱.distinct('去重字段',{條件})

例:查找年齡大于18的學(xué)生,來自哪些省份

db.stu.distinct('hometown',{age:{$gt:18}})

15.?MongoDB聚合 aggregate

定義:聚合(aggregate)主要用于計算數(shù)據(jù),類似sql中的sum()、avg()

語法:db.集合名稱.aggregate([{管道:{表達(dá)式}}])

管道:管道在Unix和Linux中一般用于將當(dāng)前命令的輸出結(jié)果作為下一個命令的輸入

ps ajx | grep mongo

在mongodb中,管道具有同樣的作用,文檔處理完畢后,通過管道進(jìn)行下一次處理

常用管道

$group:將集合中的文檔分組,可用于統(tǒng)計結(jié)果

$match:過濾數(shù)據(jù),只輸出符合條件的文檔

$project:修改輸入文檔的結(jié)構(gòu),如重命名、增加、刪除字段、創(chuàng)建計算結(jié)果

$sort:將輸入文檔排序后輸出

$limit:限制聚合管道返回的文檔數(shù)

$skip:跳過指定數(shù)量的文檔,并返回余下的文檔

$unwind:將數(shù)組類型的字段進(jìn)行拆分

表達(dá)式:處理輸入文檔并輸出

語法:表達(dá)式:'$列名'

常用表達(dá)式

$sum:? 計算總和,$sum:1同count表示計數(shù)

$avg:? 計算平均值

$min:? 獲取最小值

$max:? 獲取最大值

$push:? 在結(jié)果文檔中插入值到一個數(shù)組中

$first: 根據(jù)資源文檔的排序獲取第一個文檔數(shù)據(jù)

$last:? 根據(jù)資源文檔的排序獲取最后一個文檔數(shù)據(jù)

16.?unwind

將文檔中的某一個數(shù)組類型字段拆分成多條,每條包含數(shù)組中的一個值

語法1

對某字段值進(jìn)行拆分

db.集合名稱.aggregate([{$unwind:'$字段名稱'}])

構(gòu)造數(shù)據(jù)

db.t2.insert({_id:1,item:'t-shirt',size:['S','M','L']})

查詢

db.t2.aggregate([{$unwind:'$size'}])

語法2

對某字段值進(jìn)行拆分

處理空數(shù)組、非數(shù)組、無字段、null情況

屬性preserveNullAndEmptyArrays值為false表示丟棄屬性值為空的文檔

屬性preserveNullAndEmptyArrays值為true表示保留屬性值為空的文檔

db.inventory.aggregate([{

$unwind:{

path:'$字段名稱',

preserveNullAndEmptyArrays:#防止數(shù)據(jù)丟失

}

}])

構(gòu)造數(shù)據(jù)

db.t3.insert([

{ "_id" : 1, "item" : "a", "size": [ "S", "M", "L"] },

{ "_id" : 2, "item" : "b", "size" : [ ] },

{ "_id" : 3, "item" : "c", "size": "M" },

{ "_id" : 4, "item" : "d" },

{ "_id" : 5, "item" : "e", "size" : null }

])

使用語法1查詢

db.t3.aggregate([{$unwind:'$size'}])

查看查詢結(jié)果,發(fā)現(xiàn)對于空數(shù)組、無字段、null的文檔,都被丟棄了

問:如何能不丟棄呢?

答:使用語法2查詢

db.t3.aggregate([{$unwind:{path:'$size',preserveNullAndEmptyArrays:true}}])

17.?MongoDB索引

在mysql中已經(jīng)學(xué)習(xí)了索引,并知道索引對于查詢速度的提升

mongodb也支持索引,以提升查詢速度

步驟一:創(chuàng)建大量數(shù)據(jù)

在命令行中執(zhí)行如下代碼,向集合中插入10萬條文檔

注意:不要在圖形界面中執(zhí)行,因為軟件原因無法插入10萬條數(shù)據(jù)就會中斷執(zhí)行

for(i=0;i<100000;i++){

db.t1.insert({name:'test'+i,age:i})

}

步驟二:數(shù)據(jù)查找性能分析

查找姓名為'test10000'的文檔

db.t1.find({name:'test10000'})

使用explain()命令進(jìn)行查詢性能分析

db.t1.find({name:'test10000'}).explain('executionStats')

其中的executionStats下的executionTimeMillis表示整體查詢時間,單位是毫秒

性能分析結(jié)果如下圖,由于機(jī)器的配置原因這個時間也會不同

索引前

性能分析結(jié)果

步驟三:建立索引

創(chuàng)建索引

1表示升序,-1表示降序

db.集合.ensureIndex({屬性:1})

db.t1.ensureIndex({name:1})

步驟四:對索引屬性查詢

執(zhí)行上面的同樣的查詢,并進(jìn)行查詢性能分析

db.t1.find({name:'test10000'}).explain('executionStats')

性能分析結(jié)果如下圖

索引后:

索引的命令

建立唯一索引,實現(xiàn)唯一約束的功能

db.t1.ensureIndex({"name":1},{"unique":true})

聯(lián)合索引,對多個屬性建立一個索引,按照find()出現(xiàn)的順序

db.t1.ensureIndex({name:1,age:1})

查看文檔所有索引

db.t1.getIndexes()

刪除索引

db.t1.dropIndex('索引名稱')

18.?MongoDB 備份與恢復(fù)

備份

語法:

mongodump -h dbhost -d dbname -o dbdirectory

-h:服務(wù)器地址,也可以指定端口號

-d:需要備份的數(shù)據(jù)庫名稱

-o:備份的數(shù)據(jù)存放位置,此目錄中存放著備份出來的數(shù)據(jù)

例1

sudo mkdir test1bak

sudo mongodump -h 192.168.196.128:27017 -d test1 -o ~/Desktop/test1bak

恢復(fù)

語法:

mongorestore -h dbhost -d dbname --dir dbdirectory

-h:服務(wù)器地址

-d:需要恢復(fù)的數(shù)據(jù)庫實例

--dir:備份數(shù)據(jù)所在位置

例1

mongorestore -h 192.168.196.128:27017 -d test2 --dir ~/Desktop/test1bak/test1

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,401評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,011評論 3 413
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,263評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,543評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,323評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,874評論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,968評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,095評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,605評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,551評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,720評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,242評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 43,961評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,358評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,612評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,330評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,690評論 2 370

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