Mongodb 入門

第一章 前言

1.1 知識(shí)體系分析

  • 前端工程師:Web前端慎框,也就是在Web應(yīng)用中用戶可以看得見碰得著的東西猾浦。包括Web頁(yè)面的結(jié)構(gòu)轮纫、Web的外觀視覺表現(xiàn)以及Web層面的交互實(shí)現(xiàn)捎稚。

  • 后端工程師:與數(shù)據(jù)庫(kù)進(jìn)行交互以處理相應(yīng)的業(yè)務(wù)邏輯,提供數(shù)據(jù)供前端顯示棉饶。需要考慮的是如何實(shí)現(xiàn)功能、數(shù)據(jù)的存取赁咙、平臺(tái)的穩(wěn)定性與性能等钮莲。

1.2 mongodb概述

mongodb 是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù)。由 C++ 語(yǔ)言編寫彼水。旨在為 WEB 應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案崔拥。
mongodb 是一個(gè)介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫(kù)當(dāng)中功能最豐富凤覆,最像關(guān)系數(shù)據(jù)庫(kù)的链瓦。

  • 關(guān)系型數(shù)據(jù)庫(kù)(sql):數(shù)據(jù)以表格形式存儲(chǔ),通過(guò)表格的行列關(guān)系進(jìn)行檢索,每一行的內(nèi)容,必是符合表結(jié)構(gòu)的,就是說(shuō)--列的個(gè)數(shù),類型都一樣.
  • 文檔型數(shù)據(jù)庫(kù)(no-sql not-only-sql):數(shù)據(jù)以文檔類型進(jìn)行存儲(chǔ),數(shù)據(jù)之間沒(méi)有嚴(yán)格的映射關(guān)系.

mongodb是一種文檔形數(shù)據(jù)庫(kù),數(shù)據(jù)以key/value形式存儲(chǔ)盯桦,內(nèi)部執(zhí)行引擎為JS解釋器, 把文檔存儲(chǔ)成bson結(jié)構(gòu),通過(guò)gridefs系統(tǒng)存儲(chǔ)文件慈俯,在查詢時(shí),轉(zhuǎn)換為js對(duì)象,并可以通過(guò)熟悉的js語(yǔ)法來(lái)操作.

第二章 Mongodb在windows下的安裝

2.1 mongodb的安裝

  • 下載最新stable版的mongodb www.mongodb.org;
  • 不需要編譯,一路next安裝

2.2 目錄結(jié)構(gòu)

  • bsondump: binary-json,二進(jìn)制文件,選擇性導(dǎo)出bson文件
  • mongo: 客戶端
  • mongod: 服務(wù)端
  • mongodump: 整體導(dǎo)出數(shù)據(jù)庫(kù)(二進(jìn)制)
  • mongoexport:導(dǎo)出易識(shí)別的json文檔
  • mongoimport:導(dǎo)入json文檔
  • mongorestore:數(shù)據(jù)庫(kù)整體導(dǎo)入
  • mongos: 路由器(分片)

2.3 啟動(dòng)mongod服務(wù)

./bin/mongod.exe --dbpath /path/to/database --logpath /path/to/log-file --port 27017

參數(shù)解釋:

  • dbpath 數(shù)據(jù)存儲(chǔ)目錄
  • logpath 日志存儲(chǔ)文件
  • port 運(yùn)行端口(默認(rèn)27017)

打開localhost:27017頁(yè)面,可以看到以下信息:

It looks like you are trying to access MongoDB over HTTP on the native driver port.

證明服務(wù)器啟動(dòng)成功.

然后另外開啟一個(gè)命令窗口,執(zhí)行mongo.exe,進(jìn)入mongodb客戶端.

2.4 基本概念解釋

MongoDB術(shù)語(yǔ)/概念 解釋/說(shuō)明
database 數(shù)據(jù)庫(kù)
collection 數(shù)據(jù)庫(kù)表/集合
document 數(shù)據(jù)記錄行/文檔
field 數(shù)據(jù)字段/域
index 索引
primary key 主鍵,MongoDB自動(dòng)將_id字段設(shè)置為主鍵

第三章 Mongodb入門命令

3.1 基本查看命令

  • show dbs 查看當(dāng)前的數(shù)據(jù)庫(kù)
  • use databaseName 選庫(kù)
  • show tables/collections 查看當(dāng)前庫(kù)下的collection

3.2 庫(kù)和collection的操作

  • db
    查看當(dāng)前所處的數(shù)據(jù)庫(kù)

  • 在mongodb中,庫(kù)是隱式創(chuàng)建,
    你可以u(píng)se 一個(gè)不存在的庫(kù), 然后在該庫(kù)下創(chuàng)建collection,即可創(chuàng)建庫(kù)

  • db.dropDatabase();
    刪除database

  • db.createCollection(‘collectionName’)
    創(chuàng)建collection

  • collection也是允許隱式創(chuàng)建的
    db.collectionName.insert(document);
    在集合(表)中插入具體數(shù)據(jù)的時(shí)候會(huì)自動(dòng)創(chuàng)建

  • db.collectionName.drop() ,
    刪除collection

第四章 Mongodb基本增刪改查操作

4.1 增加數(shù)據(jù)

mongodb存儲(chǔ)的是文檔,文檔是json格式的對(duì)象,我們向數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的時(shí)候可以使用insert方法,數(shù)據(jù)格式要以js對(duì)象格式進(jìn)行存儲(chǔ):
語(yǔ)法:db.collectionName.insert(document);

我們可以以多種方法對(duì)文檔進(jìn)行存儲(chǔ):

4.1.2 增加單篇文檔

db.collectionName.insert({title:"nice day"});

4.1.3 增加單個(gè)文檔,并且指定_id

_id是我們?cè)诓迦霐?shù)據(jù)的時(shí)候,mongodb自動(dòng)給文檔添加的一個(gè)屬性,如果我們不需要系統(tǒng)分配_id,可以在添加數(shù)據(jù)的時(shí)候手動(dòng)設(shè)置,覆蓋原有_id,雖然_id的類型可以自由指定,但是在同一個(gè)集合當(dāng)中必須唯一,如果插入重復(fù)的值,系統(tǒng)會(huì)拋出異常.

這個(gè)_id的名稱是固定的,它可以是Mongodb支持的任何數(shù)據(jù)類型,默認(rèn)是ObjectId,在關(guān)系型數(shù)據(jù)庫(kù)中,主鍵通常是數(shù)值型的,并且可以設(shè)置自增,反觀Mongodb的主鍵,原生不支持自增主鍵.

db.collectionName.insert({_id:8,age:78,name:"lisi"});
> db.stu.insert({_id:3,age:17})
WriteResult({ "nInserted" : 1 })
> db.stu.insert({_id:3,age:14})
WriteResult({
        "nInserted" : 0,
        "writeError" : {
                "code" : 11000,
                "errmsg" : "E11000 duplicate key error collection: web.students index: _id_ dup key: { : 3.0 }"
        }
})

4.1.4 增加多個(gè)文檔

db.collectionName.insert(
    [
        {time:'friday',study:'mongodb'},
        {_id:9,gender:'male',name:'QQ'}
    ]
 )

可以以數(shù)組的方式,一次性向集合插入多個(gè)數(shù)據(jù);

同時(shí)應(yīng)該注意的是,由于mongodb采用的是JavaScript Shell,所以我們可以根據(jù)js特性,將文檔作為值賦給變量然后進(jìn)行操作:

j = {name : "mongo"};
t = {x:3};
db.stu.insert([j,t]);

4.1.5 save和insert的區(qū)別

save和insert都可以進(jìn)行數(shù)據(jù)的插入和增加,但是也有一些異同:

對(duì)于已存在數(shù)據(jù){_id:1, "name":"n1"},再次進(jìn)行插入操作時(shí)拥峦,insert({_id : 1, "name" :"n2"})會(huì)報(bào)主鍵重復(fù)的錯(cuò)誤提示save({ _id:1, " name ":"n2"})會(huì)把n1修改為n2贴膘。

相同點(diǎn):
若新增的數(shù)據(jù)中沒(méi)有主鍵時(shí),會(huì)增加一條記錄事镣。

4.2 查詢操作

4.2.1 find()

無(wú)條件的普通查詢方式很簡(jiǎn)單,可以直接使用
db.collectionName.find();一次可以查出指定集合中的所有數(shù)據(jù)

for(var i = 1;1<10;i++) db.stu.save({x:4,y:3});
db.stu.find();

如果出現(xiàn)顯示不全的現(xiàn)象,可以使用"it"命令,繼續(xù)顯示下面的數(shù)據(jù).

當(dāng)然,我們還可以按照條件進(jìn)行查詢操作

語(yǔ)法: db.collection.find(查詢表達(dá)式,查詢的列);

例1: db.stu.find({},{gendre:1})
查詢所有文檔,的gender屬性 (_id屬性默認(rèn)總是查出來(lái))

例2: db.stu.find({},{gender:1, _id:0})
查詢所有文檔的gender屬性,且不查詢_id屬性

此處的0表示的是false,不查詢

例3: db.stu.find({gender:’male’},{name:1,_id:0});
查詢所有g(shù)ender屬性值為male的文檔中的name屬性

4.2.2 findOne()

findOne()和find()函數(shù)一樣,只是findOne()返回的是查詢結(jié)果中的第一條數(shù)據(jù),或者返回null.

db.stu.findOne(查詢表達(dá)式,查詢的列)

4.3 刪除操作

語(yǔ)法: db.collectionName.remove(查詢表達(dá)式, 選項(xiàng));

選項(xiàng)是指 {justOne:true/false},是否只刪一行, 默認(rèn)為false

注意

  • 1: 查詢表達(dá)式依然是個(gè)json對(duì)象
  • 2: 查詢表達(dá)式匹配的行,將被刪掉.
  • 3: 如果查詢表達(dá)式為空對(duì)象{},collections中的所有文檔將被刪掉.

例1: db.stu.remove({sn:'001'});

刪除stu表中sn屬性值為'001'的文檔

例2: db.stu.remove({gender:'m'},true);

刪除stu表中g(shù)ender屬性為m的文檔,只刪除1行.

4.4 修改操作

語(yǔ)法: db.collection.update(查詢表達(dá)式,新值,選項(xiàng));

* 改哪幾行? --- 查詢表達(dá)式
* 改成什么樣? -- 新值 或 賦值表達(dá)式
* 操作選項(xiàng) ----- 可選參數(shù)
        upsert:如果要更新的那條記錄沒(méi)有找到步鉴,是否插入一條新紀(jì)錄揪胃,默認(rèn)為false
        multi :是否更新滿足條件的多條的記錄,默認(rèn)為false 

multi :是否更新滿足條件的多條的記錄璃哟,false:只更新第一條,true:更新多條喊递,默認(rèn)為false

例:db.news.update({name:'QQ'},{name:'MSN'});

是指選中news表中,name值為QQ的文檔,并把其文檔值改為{name:"MSN"},

結(jié)果: 文檔中的其他列也不見了,改后只有_id和name列了.即是新文檔直接覆蓋了舊文檔,而不是修改.

4.4.1 修改操作中的關(guān)鍵字

如果是想修改文檔的某列,可以用$set關(guān)鍵字

db.collectionName.update(query,{$set:{name:’QQ’}})

修改時(shí)的賦值表達(dá)式

  • $set 修改某列的值
  • $unset 刪除某個(gè)列
  • $inc 增長(zhǎng)某個(gè)列
  • $rename 重新命名某列
  • $setOnInsert 當(dāng)upsert為true時(shí),并且發(fā)生了insert操作時(shí),可以補(bǔ)充的字段.
$inc實(shí)例

按照指定的步長(zhǎng)增長(zhǎng)某個(gè)列;

> db.stu.insert({"uid":"201203","type":"1",size:10})
> db.stu.find()
{ "_id" : ObjectId("5003b6135af21ff428dafbe6"), "uid" : "201203", "type" : "1",
"size" : 10 }
> db.stu.update({"uid" : "201203"},{"$inc":{"size" : 2}})
> db.stu.find()
{ "_id" : ObjectId("5003b6135af21ff428dafbe6"), "uid" : "201203", "type" : "1",
"size" : 12 }
$unset實(shí)例
>db.stu.find({_id:3})
{"_id" : 3 , "age" : 18}
> db.stu.update({_id:3},{$unset:{age:'sss'}})
WriteResult({ "nMatched" : 0, "nUpserted" : 0, "nModified" : 0 })
> db.stu.update({_id:3},{$unset:{age:'sss'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.stu.find({_id:3})
{ "_id" : 3 }
$rename實(shí)例
->db.stu.insert({name:'lisi',age:12,sex:'male',height:123,area:'haidian'});
->db.stu.update({name:'lisi'},{$set:{area:'chaoyang'},$unset:{height:1},$inc:{age:1},$rename:{sex:'gender'}});

4.4.2 Option選項(xiàng)的作用:

{upsert:true/false,multi:true/false}

  • upsert:是指沒(méi)有匹配的行,則直接插入該行

例:db.stu.update({name:'wuyong'},{$set:{name:'junshiwuyong'}},{upsert:true});
如果有name='wuyong'的文檔,將被修改,如果沒(méi)有,將添加此新文檔

例:db.news.update({_id:99},{x:123,y:234},{upsert:true});
沒(méi)有_id=99的文檔被修改,因此直接插入該文檔

  • multi: 是指修改多行(即使查詢表達(dá)式命中多行,默認(rèn)也只改1行,如果想改多行,可以用此選項(xiàng))

例:db.news.update({age:21},{$set:{age:22}},{multi:true});
則把news中所有age=21的文檔,都修改

4.5 查詢表達(dá)式

我們無(wú)論在修改刪除還是查詢的過(guò)程中,都需要傳入查詢表達(dá)式對(duì)目標(biāo)數(shù)據(jù)進(jìn)行查詢,表達(dá)式有很多種

1: 最簡(jiǎn)單的查詢表達(dá)式
{filed:value} ,是指查詢field列的值為value的文檔

2: $ne:!=
{field:{$ne:value}}
db.stu.find({age:{$ne:16}})
作用--查age列的值 不等于16的文檔

3:$gt:大于
  $lt:小于
  $gte:大于或等于
  $lte:小于或等于

4: $in:[]
查詢某列的值在范圍內(nèi)的文檔
db.goods.find({cat_id:{$in:[2,8]}}

5: $nin:not in
查詢某列不在范圍內(nèi)的文檔
$nin:[2,3,5]

6: $exists 
語(yǔ)法: {field:{$exists:1}}
作用: 查詢出含有field字段的文檔

7:用正則表達(dá)式查詢 以”諾基亞”開頭的商品
例:db.goods.find({goods_name:/諾基亞.*/},{goods_name:1});

第五章 游標(biāo)操作

通俗的說(shuō),游標(biāo)不是查詢結(jié)果,而是查詢的返回資源,或者接口随闪,通過(guò)這個(gè)接口,你可以逐條對(duì)數(shù)據(jù)進(jìn)行讀取骚勘;

聲明游標(biāo):

var cursor = db.collectioName.find(query,projection);
cursor.hasNext() //判斷游標(biāo)是否已經(jīng)取到盡頭
cursor.next() //取出游標(biāo)的下1個(gè)單元

用while來(lái)循環(huán)游標(biāo)

> var mycursor = db.bar.find({_id:{$lte:5}})
> while(mycursor.hasNext()) {
    printjson(mycursor.next());
}

游標(biāo)還有一個(gè)迭代函數(shù),允許我們自定義回調(diào)函數(shù)來(lái)逐個(gè)處理每個(gè)單元.

cursor.forEach(回調(diào)函數(shù));

> var gettitle = function(obj) {print(obj.goods_name)}
> var cursor = db.goods.find();
> cursor.forEach(gettitle);

游標(biāo)在分頁(yè)中的應(yīng)用

比如查到10000行,跳過(guò)100頁(yè),取10行,一般地,我們假設(shè)每頁(yè)N行, 當(dāng)前是page頁(yè),就需要跳過(guò)前 (page-1)*N 行, 再取N行.

在mongo中,分頁(yè)是用skip(), limit()函數(shù)來(lái)實(shí)現(xiàn)的

//查詢結(jié)果中,跳過(guò)前9995行
var mycursor = db.bar.find().skip(9995);

//查詢第901頁(yè),每頁(yè)10條
則是 var mytcursor = db.bar.find().skip(9000).limit(10);

第六章 MongoDB在Node環(huán)境中使用

我們?nèi)绻胍獙ongodb用于實(shí)際的開發(fā)中于nodejs作為交互,需要下載node下的mongodb服務(wù)器模塊.

在項(xiàng)目根目錄下運(yùn)行

npm install mongodb --save 

安裝完畢后啟動(dòng)mongodb的服務(wù)端mongod.exe,我們就可以通過(guò)js代碼的形式鏈接mongodb數(shù)據(jù)庫(kù)了

6.1 快速開始

官方API地址:http://mongodb.github.io/node-mongodb-native/2.2/quick-start/quick-start/

var myClient = require('mongodb').MongoClient;
var server = 'mongodb://localhost:27017/web';//連接web集合
myClient.connect(server,function(err,db){//連接數(shù)據(jù)庫(kù)
    if(!err){
        console.log(db);
        db.close();       //關(guān)閉數(shù)據(jù)庫(kù)
    }
})

6.2 增加數(shù)據(jù)

插入數(shù)據(jù)有insertOne和insertMany兩種方法

var MongoClient = require('mongodb').MongoClient
var url = 'mongodb://localhost:27017/web';
MongoClient.connect(url, function(err, db) {
  db.collection('inserts').insertOne({a:1}, function(err, res) {
    //insertOne插入一條數(shù)據(jù)
      console.log(res.insertedCount);
    //返回值對(duì)象里的insertedCount表示插入數(shù)量
    });
    db.collection('inserts').insertMany([{a:2},{a:3}], function(err, res) {
    //insertOne插入多條數(shù)據(jù)
      console.log(res.insertedCount);
      db.close();
    });
});

6.3 查詢數(shù)據(jù)

查詢所有的文檔數(shù)據(jù)

var MongoClient = require('mongodb').MongoClient
var url = 'mongodb://localhost:27017/web';
MongoClient.connect(url, function(err, db) {
    db.collection('inserts').find({}).toArray(function(err,docs){
            if(!err){
                console.log(docs);
            }
            db.close();
        });
});

當(dāng)然,我們可以使用條件查詢數(shù)據(jù)

var MongoClient = require('mongodb').MongoClient
var url = 'mongodb://localhost:27017/web';
MongoClient.connect(url, function(err, db) {
    db.collection('inserts').find({a:{$ne:2}}).toArray(function(err, docs) {
        if (!err) {
            console.log(docs);
        }
        db.close();
    });
});

查詢數(shù)據(jù)的過(guò)程中铐伴,我們同樣可以使用skip(),limit()等方法

var MongoClient = require('mongodb').MongoClient
var url = 'mongodb://localhost:27017/web';
MongoClient.connect(url, function(err, db) {
    db.collection('inserts').find({a:{$ne:2}}).skip(4).limit(2).toArray(function(err, docs) {
        if (!err) {
            console.log(docs);
        }
        db.close();
    });
});

查詢過(guò)程中的連續(xù)操作

在查詢的過(guò)程中撮奏,給我們提供了三個(gè)連續(xù)操作的API findOneAndUpdate, findOneAndDelete, findOneAndReplace,使用起來(lái)也非常方便

var MongoClient = require('mongodb').MongoClient
var url = 'mongodb://localhost:27017/web';
MongoClient.connect(url, function(err, db) {
    db.collection('inserts').findOneAndUpdate({a:1},{$set:{b:3}},function(err,res){
      console.log(res);
    });
    db.close();
});
var MongoClient = require('mongodb').MongoClient
var url = 'mongodb://localhost:27017/web';
MongoClient.connect(url, function(err, db) {
    db.collection('inserts').findOneAndDelete({b:3},function(err,res){
      console.log(res);
    });
    db.close();
});

6.4 刪除操作

我們可以使用deleteOne和deleteMany方法刪除collection中的數(shù)據(jù)

var MongoClient = require('mongodb').MongoClient
var url = 'mongodb://localhost:27017/web';
MongoClient.connect(url, function(err, db) {
    db.collection('inserts').deleteOne({a:1},function(err,res){
      console.log(res.deletedCount);
    });
    db.close();
});
var MongoClient = require('mongodb').MongoClient
var url = 'mongodb://localhost:27017/web';
MongoClient.connect(url, function(err, db) {
    db.collection('inserts').deleteMany({a:2},function(err,res){
      console.log(res.deletedCount);
    });
    db.close();
});

6.5 修改操作

同樣,update操作也可以使用updateOne和updateMany兩種方法,在修改的同時(shí)也可以使用查詢表達(dá)式.

var MongoClient = require('mongodb').MongoClient
var url = 'mongodb://localhost:27017/web';
MongoClient.connect(url, function(err, db) {
    db.collection('inserts').updateOne({a:1},{$set:{b:2}},function(err,res){
      console.log(res.modifiedCount);
    });
    db.close();
});

{upsert: true}幫助我們?cè)谛薷牟淮嬖诘臄?shù)據(jù)時(shí)插入一條新數(shù)據(jù)`

注意

如果按照"_id"進(jìn)行查詢或者修改的話,直接填入_id的值是不能獲取結(jié)果的,因?yàn)閙ongodb的_id默認(rèn)值是ObjectId類型的

var MongoClient = require('mongodb').MongoClient
var url = 'mongodb://localhost:27017/web';
MongoClient.connect(url, function(err, db) {
    db.collection('inserts').find({_id:"58b04104ae7db136d00ebb66"}).toArray(function(err, docs) {
        if (!err) {
            console.log(docs);
        }
        db.close();
    });
});

會(huì)發(fā)現(xiàn)方法正確但是沒(méi)有返回值;如果我們想要按照主鍵查找当宴,需要引入Object模塊:

var MongoClient = require('mongodb').MongoClient;
var ObjectId = require('mongodb').ObjectId;
var url = 'mongodb://localhost:27017/web';
MongoClient.connect(url, function(err, db) {
    db.collection('inserts').find({_id:ObjectId("58b04104ae7db136d00ebb66")}).toArray(function(err, docs) {
        if (!err) {
            console.log(docs);
        }
        db.close();
    });
});
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末畜吊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子户矢,更是在濱河造成了極大的恐慌玲献,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梯浪,死亡現(xiàn)場(chǎng)離奇詭異捌年,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)挂洛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門礼预,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人虏劲,你說(shuō)我怎么就攤上這事托酸。” “怎么了伙单?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵获高,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我吻育,道長(zhǎng)念秧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任布疼,我火速辦了婚禮摊趾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘游两。我一直安慰自己砾层,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布贱案。 她就那樣靜靜地躺著肛炮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宝踪。 梳的紋絲不亂的頭發(fā)上侨糟,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音瘩燥,去河邊找鬼秕重。 笑死,一個(gè)胖子當(dāng)著我的面吹牛厉膀,可吹牛的內(nèi)容都是我干的溶耘。 我是一名探鬼主播二拐,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼凳兵!你這毒婦竟也來(lái)了百新?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤庐扫,失蹤者是張志新(化名)和其女友劉穎吟孙,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體聚蝶,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡杰妓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了碘勉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巷挥。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖验靡,靈堂內(nèi)的尸體忽然破棺而出倍宾,到底是詐尸還是另有隱情,我是刑警寧澤胜嗓,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布高职,位于F島的核電站,受9級(jí)特大地震影響辞州,放射性物質(zhì)發(fā)生泄漏怔锌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一变过、第九天 我趴在偏房一處隱蔽的房頂上張望埃元。 院中可真熱鬧,春花似錦媚狰、人聲如沸岛杀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)类嗤。三九已至,卻和暖如春辨宠,著一層夾襖步出監(jiān)牢的瞬間遗锣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工彭羹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留黄伊,地道東北人泪酱。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓派殷,卻偏偏與公主長(zhǎng)得像还最,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子毡惜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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

  • 安裝 MongoDB Windowns拓轻、Ubuntu17.10 下安裝 MongoDB教程在此 MongoDB 幫...
    Kangvcar閱讀 2,094評(píng)論 0 13
  • MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù)。由C++語(yǔ)言編寫经伙。旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方...
    入戲半分笑閱讀 376評(píng)論 0 2
  • MongoDB與關(guān)系型數(shù)據(jù)庫(kù)對(duì)比 MongoDB屬于文檔型的非關(guān)系型數(shù)據(jù)庫(kù)扶叉,其他像Redis就屬于鍵值對(duì)型的非關(guān)系...
    少見多怪閱讀 1,753評(píng)論 0 4
  • 1.express node Web應(yīng)用框架,提供了很多Web應(yīng)用和HTTP工具 使用express可以快速搭建一...
    寒梁沐月閱讀 459評(píng)論 2 6
  • 1.express node Web應(yīng)用框架帕膜,提供了很多Web應(yīng)用和HTTP工具 使用express可以快速搭建一...
    昵稱不能太隨便閱讀 1,327評(píng)論 0 2