成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

MongoDB指南---9、游標(biāo)與數(shù)據(jù)庫命令

lemanli / 3887人閱讀

摘要:例如在中,可以用產(chǎn)生一個(gè)的隨機(jī)數(shù)這樣,想要從集合中查找一個(gè)隨機(jī)文檔,只要計(jì)算一個(gè)隨機(jī)數(shù)并將其作為查詢條件就好了,完全不用偶爾也會(huì)遇到產(chǎn)生的隨機(jī)數(shù)比集合中所有隨機(jī)值都大的情況,這時(shí)就沒有結(jié)果返回了。指定本次查詢中掃描文檔數(shù)量的上限。

上一篇文章:MongoDB指南---8、特定類型的查詢
下一篇文章:MongoDB指南---10、索引、復(fù)合索引 簡介

數(shù)據(jù)庫使用游標(biāo)返回find的執(zhí)行結(jié)果。客戶端對(duì)游標(biāo)的實(shí)現(xiàn)通常能夠?qū)ψ罱K結(jié)果進(jìn)行有效的控制??梢韵拗平Y(jié)果的數(shù)量,略過部分結(jié)果,根據(jù)任意鍵按任意順序的組合對(duì)結(jié)果進(jìn)行各種排序,或者是執(zhí)行其他一些強(qiáng)大的操作。
要想從shell中創(chuàng)建一個(gè)游標(biāo),首先要對(duì)集合填充一些文檔,然后對(duì)其執(zhí)行查詢,并將結(jié)果分配給一個(gè)局部變量(用var聲明的變量就是局部變量)。這里,先創(chuàng)建一個(gè)簡單的集合,而后做個(gè)查詢,并用cursor變量保存結(jié)果:

> for(i=0; i<100; i++) {
...     db.collection.insert({x : i});
... }
> var cursor = db.collection.find();

這么做的好處是可以一次查看一條結(jié)果。如果將結(jié)果放在全局變量或者就沒有放在變量中,MongoDB shell會(huì)自動(dòng)迭代,自動(dòng)顯示最開始的若干文檔。也就是在這之前我們看到的種種例子,一般大家只想通過shell看看集合里面有什么,而不是想在其中實(shí)際運(yùn)行程序,這樣設(shè)計(jì)也就很合適。
要迭代結(jié)果,可以使用游標(biāo)的next方法。也可以使用hasNext來查看游標(biāo)中是否還有其他結(jié)果。典型的結(jié)果遍歷如下所示:

> while (cursor.hasNext()) {
...     obj = cursor.next();
...     // do stuff
... }

cursor.hasNext()檢查是否有后續(xù)結(jié)果存在,然后用cursor.next()獲得它。
游標(biāo)類還實(shí)現(xiàn)了JavaScript的迭代器接口,所以可以在forEach循環(huán)中使用:

> var cursor = db.people.find();
> cursor.forEach(function(x) {
...     print(x.name);
... });
adam
matt
zak

調(diào)用find時(shí),shell并不立即查詢數(shù)據(jù)庫,而是等待真正開始要求獲得結(jié)果時(shí)才發(fā)送查詢,這樣在執(zhí)行之前可以給查詢附加額外的選項(xiàng)。幾乎游標(biāo)對(duì)象的每個(gè)方法都返回游標(biāo)本身,這樣就可以按任意順序組成方法鏈。例如,下面幾種表達(dá)是等價(jià)的:

> var cursor = db.foo.find().sort({"x" : 1}).limit(1).skip(10);
> var cursor = db.foo.find().limit(1).sort({"x" : 1}).skip(10);
> var cursor = db.foo.find().skip(10).limit(1).sort({"x" : 1});

此時(shí),查詢還沒有真正執(zhí)行,所有這些函數(shù)都只是構(gòu)造查詢?,F(xiàn)在,假設(shè)我們執(zhí)行如下操作:

> cursor.hasNext()

這時(shí),查詢被發(fā)往服務(wù)器。shell立刻獲取前100個(gè)結(jié)果或者前4 MB數(shù)據(jù)(兩者之中較小者),這樣下次調(diào)用next或者h(yuǎn)asNext時(shí)就不必再次連接服務(wù)器取結(jié)果了??蛻舳擞霉饬说谝唤M結(jié)果,shell會(huì)再一次聯(lián)系數(shù)據(jù)庫,使用getMore請(qǐng)求提取更多的結(jié)果。getMore請(qǐng)求包含一個(gè)查詢標(biāo)識(shí)符,向數(shù)據(jù)庫詢問是否還有更多的結(jié)果,如果有,則返回下一批結(jié)果。這個(gè)過程會(huì)一直持續(xù)到游標(biāo)耗盡或者結(jié)果全部返回。

4.5.1 limit、skip和sort

最常用的查詢選項(xiàng)就是限制返回結(jié)果的數(shù)量、忽略一定數(shù)量的結(jié)果以及排序。所有這些選項(xiàng)一定要在查詢被發(fā)送到服務(wù)器之前指定。
要限制結(jié)果數(shù)量,可在find后使用limit函數(shù)。例如,只返回3個(gè)結(jié)果,可以這樣:

> db.c.find().limit(3)

要是匹配的結(jié)果不到3個(gè),則返回匹配數(shù)量的結(jié)果。limit指定的是上限,而非下限。
skip與limit類似:

> db.c.find().skip(3)

上面的操作會(huì)略過前三個(gè)匹配的文檔,然后返回余下的文檔。如果集合里面能匹配的文檔少于3個(gè),則不會(huì)返回任何文檔。
sort接受一個(gè)對(duì)象作為參數(shù),這個(gè)對(duì)象是一組鍵/值對(duì),鍵對(duì)應(yīng)文檔的鍵名,值代表排序的方向。排序方向可以是1(升序)或者-1(降序)。如果指定了多個(gè)鍵,則按照這些鍵被指定的順序逐個(gè)排序。例如,要按照"username"升序及"age"降序排序,可以這樣寫:

> db.c.find().sort({username : 1, age : -1})

這3個(gè)方法可以組合使用。這對(duì)于分頁非常有用。例如,你有個(gè)在線商店,有人想搜索mp3。若是想每頁返回50個(gè)結(jié)果,而且按照價(jià)格從高到低排序,可以這樣寫:

> db.stock.find({"desc" : "mp3"}).limit(50).sort({"price" : -1})

點(diǎn)擊“下一頁”可以看到更多的結(jié)果,通過skip也可以非常簡單地實(shí)現(xiàn),只需要略過前50個(gè)結(jié)果就好了(已經(jīng)在第一頁顯示了):

> db.stock.find({"desc" : "mp3"}).limit(50).skip(50).sort({"price" : -1})

然而,略過過多的結(jié)果會(huì)導(dǎo)致性能問題,下一小節(jié)會(huì)講述如何避免略過大量結(jié)果。

比較順序

MongoDB處理不同類型的數(shù)據(jù)是有一定順序的。有時(shí)一個(gè)鍵的值可能是多種類型的,例如,整型和布爾型,或者字符串和null。如果對(duì)這種混合類型的鍵排序,其排序順序是預(yù)先定義好的。優(yōu)先級(jí)從小到大,其順序如下:

最小值;

null;

數(shù)字(整型、長整型、雙精度);

字符串;

對(duì)象/文檔;

數(shù)組;

二進(jìn)制數(shù)據(jù);

對(duì)象ID;

布爾型;

日期型;

時(shí)間戳;

正則表達(dá)式;

最大值 。

4.5.2 避免使用skip略過大量結(jié)果

用skip略過少量的文檔還是不錯(cuò)的。但是要是數(shù)量非常多的話,skip就會(huì)變得很慢,因?yàn)橐日业叫枰宦赃^的數(shù)據(jù),然后再拋棄這些數(shù)據(jù)。大多數(shù)數(shù)據(jù)庫都會(huì)在索引中保存更多的元數(shù)據(jù),用于處理skip,但是MongoDB目前還不支持,所以要盡量避免略過太多的數(shù)據(jù)。通常可以利用上次的結(jié)果來計(jì)算下一次查詢條件。

1. 不用skip對(duì)結(jié)果分頁

最簡單的分頁方法就是用limit返回結(jié)果的第一頁,然后將每個(gè)后續(xù)頁面作為相對(duì)于開始的偏移量返回。

> // 不要這么用:略過的數(shù)據(jù)比較多時(shí),速度會(huì)變得很慢
> var page1 = db.foo.find(criteria).limit(100)
> var page2 = db.foo.find(criteria).skip(100).limit(100)
> var page3 = db.foo.find(criteria).skip(200).limit(100)
...

然而,一般來講可以找到一種方法在不使用skip的情況下實(shí)現(xiàn)分頁,這取決于查詢本身。例如,要按照"date"降序顯示文檔列表??梢杂萌缦路绞将@取結(jié)果的第一頁:

> var page1 = db.foo.find().sort({"date" : -1}).limit(100)

然后,可以利用最后一個(gè)文檔中"date"的值作為查詢條件,來獲取下一頁:

var latest = null;
// 顯示第一頁
while (page1.hasNext()) {
    latest = page1.next();
    display(latest);
}
// 獲取下一頁
var page2 = db.foo.find({"date" : {"$gt" : latest.date}});
page2.sort({"date" : -1}).limit(100);
這樣查詢中就沒有skip了。
2. 隨機(jī)選取文檔

從集合里面隨機(jī)挑選一個(gè)文檔算是個(gè)常見問題。最笨的(也很慢的)做法就是先計(jì)算文檔總數(shù),然后選擇一個(gè)從0到文檔數(shù)量之間的隨機(jī)數(shù),利用find做一次查詢,略過這個(gè)隨機(jī)數(shù)那么多的文檔,這個(gè)隨機(jī)數(shù)的取值范圍為0到集合中文檔的總數(shù):

> // 不要這么用
> var total = db.foo.count()
> var random = Math.floor(Math.random()*total)
> db.foo.find().skip(random).limit(1)

這種選取隨機(jī)文檔的做法效率太低:首先得計(jì)算總數(shù)(要是有查詢條件就會(huì)很費(fèi)時(shí)),然后用skip略過大量結(jié)果也會(huì)非常耗時(shí)。
略微動(dòng)動(dòng)腦筋,從集合里面查找一個(gè)隨機(jī)元素還是有好得多的辦法的。秘訣就是在插入文檔時(shí)給每個(gè)文檔都添加一個(gè)額外的隨機(jī)鍵。例如在shell中,可以用Math.random()(產(chǎn)生一個(gè)0~1的隨機(jī)數(shù)):

> db.people.insert({"name" : "joe", "random" : Math.random()})
> db.people.insert({"name" : "john", "random" : Math.random()})
> db.people.insert({"name" : "jim", "random" : Math.random()})

這樣,想要從集合中查找一個(gè)隨機(jī)文檔,只要計(jì)算一個(gè)隨機(jī)數(shù)并將其作為查詢條件就好了,完全不用skip:

> var random = Math.random()
> result = db.foo.findOne({"random" : {"$gt" : random}})

偶爾也會(huì)遇到產(chǎn)生的隨機(jī)數(shù)比集合中所有隨機(jī)值都大的情況,這時(shí)就沒有結(jié)果返回了。遇到這種情況,那就將條件操作符換一個(gè)方向:

> if (result == null) {
...     result = db.foo.findOne({"random" : {"$lt" : random}})
... }

要是集合里面本就沒有文檔,則會(huì)返回null,這說得通。
這種技巧還可以和其他各種復(fù)雜的查詢一同使用,僅需要確保有包含隨機(jī)鍵的索引即可。例如,想在加州隨機(jī)找一個(gè)水暖工,可以對(duì)"profession"、"state"和"random"建立索引:

> db.people.ensureIndex({"profession" : 1, "state" : 1, "random" : 1})

這樣就能很快得出一個(gè)隨機(jī)結(jié)果(關(guān)于索引,詳見第5章)。

4.5.3 高級(jí)查詢選項(xiàng)

有兩種類型的查詢:簡單查詢(plain query)和封裝查詢(wrapped query)。簡單查詢就像下面這樣:

> var cursor = db.foo.find({"foo" : "bar"})

有一些選項(xiàng)可以用于對(duì)查詢進(jìn)行“封裝”。例如,假設(shè)我們執(zhí)行一個(gè)排序:

> var cursor = db.foo.find({"foo" : "bar"}).sort({"x" : 1})

實(shí)際情況不是將{"foo" : "bar"}作為查詢直接發(fā)送給數(shù)據(jù)庫,而是先將查詢封裝在一個(gè)更大的文檔中。shell會(huì)把查詢從{"foo" : "bar"}轉(zhuǎn)換成{"$query" : {"foo" : "bar"},"$orderby" : {"x" : 1}}。
絕大多數(shù)驅(qū)動(dòng)程序都提供了輔助函數(shù),用于向查詢中添加各種選項(xiàng)。下面列舉了其他一些有用的選項(xiàng)。

$maxscan : integer

指定本次查詢中掃描文檔數(shù)量的上限。

> db.foo.find(criteria)._addSpecial("$maxscan", 20)

如果不希望查詢耗時(shí)太多,也不確定集合中到底有多少文檔需要掃描,那么可以使用這個(gè)選項(xiàng)。這樣就會(huì)將查詢結(jié)果限定為與被掃描的集合部分相匹配的文檔。這種方式的一個(gè)壞處是,某些你希望得到的文檔沒有掃描到。

$min : document

查詢的開始條件。在這樣的查詢中,文檔必須與索引的鍵完全匹配。查詢中會(huì)強(qiáng)制使用給定的索引。
在內(nèi)部使用時(shí),通常應(yīng)該使用"$gt"代替"$min"??梢允褂?$min"強(qiáng)制指定一次索引掃描的下邊界,這在復(fù)雜查詢中非常有用。

$max : document

查詢的結(jié)束條件。在這樣的查詢中,文檔必須與索引的鍵完全匹配。查詢中會(huì)強(qiáng)制使用給定的索引。
在內(nèi)部使用時(shí),通常應(yīng)該使用"$lg"而不是"$max"??梢允褂?$max"強(qiáng)制指定一次索引掃描的上邊界,這在復(fù)雜查詢中非常有用。

$showDiskLoc : true

在查詢結(jié)果中添加一個(gè)"$diskLoc"字段,用于顯示該條結(jié)果在磁盤上的位置。例如:

> db.foo.find()._addSpecial("$showDiskLoc",true)
{ "_id" : 0, "$diskLoc" : { "file" : 2, "offset" : 154812592 } }
{ "_id" : 1, "$diskLoc" : { "file" : 2, "offset" : 154812628 } } 

文件號(hào)碼顯示了這個(gè)文檔所在的文件。如果這里使用的是test數(shù)據(jù)庫,那么這個(gè)文檔就在test.2文件中。第二個(gè)字段顯示的是該文檔在文件中的偏移量。

4.5.4 獲取一致結(jié)果

數(shù)據(jù)處理通常的做法就是先把數(shù)據(jù)從MongoDB中取出來,然后做一些變換,最后再存回去:

cursor = db.foo.find();

while (cursor.hasNext()) {
    var doc = cursor.next();
    doc = process(doc);
    db.foo.save(doc);
}

結(jié)果比較少,這樣是沒問題的,但是如果結(jié)果集比較大,MongoDB可能會(huì)多次返回同一個(gè)文檔。為什么呢?想象一下文檔究竟是如何存儲(chǔ)的吧??梢詫⒓峡醋鲆粋€(gè)文檔列表,如圖4-1所示。雪花代表文檔,因?yàn)槊恳粋€(gè)文檔都是美麗且唯一的。

圖4-1 待查詢的集合
這樣,進(jìn)行查找時(shí),從集合的開頭返回結(jié)果,游標(biāo)不斷向右移動(dòng)。程序獲取前100個(gè)文檔并處理。將這些文檔保存回?cái)?shù)據(jù)庫時(shí),如果文檔體積增加了,而預(yù)留空間不足,如圖4-2所示,這時(shí)就需要對(duì)體積增大后的文檔進(jìn)行移動(dòng)。通常會(huì)將它們挪至集合的末尾處(如圖4-3所示)。

圖4-2 體積變大的文檔,可能無法保存回原先的位置

圖4-3  MongoDB會(huì)為更新后無法放回原位置的文檔重新分配存儲(chǔ)空間
現(xiàn)在,程序繼續(xù)獲取大量的文檔,如此往復(fù)。當(dāng)游標(biāo)移動(dòng)到集合末尾時(shí),就會(huì)返回因體積太大無法放回原位置而被移動(dòng)到集合末尾的文檔,如圖4-4所示。

圖4-4 游標(biāo)可能會(huì)返回那些由于體積變大而被移動(dòng)到集合末尾的文檔
應(yīng)對(duì)這個(gè)問題的方法就是對(duì)查詢進(jìn)行快照(snapshot)。如果使用了這個(gè)選項(xiàng),查詢就在"_id"索引上遍歷執(zhí)行,這樣可以保證每個(gè)文檔只被返回一次。例如,將db.foo.find()改為:

> db.foo.find().snapshot()

快照會(huì)使查詢變慢,所以應(yīng)該只在必要時(shí)使用快照。例如,mongodump(用于備份,第22章會(huì)介紹)默認(rèn)在快照上使用查詢。
所有返回單批結(jié)果的查詢都被有效地進(jìn)行了快照。當(dāng)游標(biāo)正在等待獲取下一批結(jié)果時(shí),如果集合發(fā)生了變化,數(shù)據(jù)才可能出現(xiàn)不一致。

4.5.5 游標(biāo)生命周期

看待游標(biāo)有兩種角度:客戶端的游標(biāo)以及客戶端游標(biāo)表示的數(shù)據(jù)庫游標(biāo)。前面討論的都是客戶端的游標(biāo),接下來簡要看看服務(wù)器端發(fā)生了什么。
在服務(wù)器端,游標(biāo)消耗內(nèi)存和其他資源。游標(biāo)遍歷盡了結(jié)果以后,或者客戶端發(fā)來消息要求終止,數(shù)據(jù)庫將會(huì)釋放這些資源。釋放的資源可以被數(shù)據(jù)庫另作他用,這是非常有益的,所以要盡量保證盡快釋放游標(biāo)(在合理的前提下)。
還有一些情況導(dǎo)致游標(biāo)終止(隨后被清理)。首先,游標(biāo)完成匹配結(jié)果的迭代時(shí),它會(huì)清除自身。另外,如果客戶端的游標(biāo)已經(jīng)不在作用域內(nèi)了,驅(qū)動(dòng)程序會(huì)向服務(wù)器發(fā)送一條特別的消息,讓其銷毀游標(biāo)。最后,即便用戶沒有迭代完所有結(jié)果,并且游標(biāo)也還在作用域中,如果一個(gè)游標(biāo)在10分鐘內(nèi)沒有使用的話,數(shù)據(jù)庫游標(biāo)也會(huì)自動(dòng)銷毀。這樣的話,如果客戶端崩潰或者出錯(cuò),MongoDB就不需要維護(hù)這上千個(gè)被打開卻不再使用的游標(biāo)。
這種“超時(shí)銷毀”的行為是我們希望的:極少有應(yīng)用程序希望用戶花費(fèi)數(shù)分鐘坐在那里等待結(jié)果。然而,有時(shí)的確希望游標(biāo)持續(xù)的時(shí)間長一些。若是如此的話,多數(shù)驅(qū)動(dòng)程序都實(shí)現(xiàn)了一個(gè)叫immortal的函數(shù),或者類似的機(jī)制,來告知數(shù)據(jù)庫不要讓游標(biāo)超時(shí)。如果關(guān)閉了游標(biāo)的超時(shí)時(shí)間,則一定要迭代完所有結(jié)果,或者主動(dòng)將其銷毀,以確保游標(biāo)被關(guān)閉。否則它會(huì)一直在數(shù)據(jù)庫中消耗服務(wù)器資源。

4.6 數(shù)據(jù)庫命令

有一種非常特殊的查詢類型叫作數(shù)據(jù)庫命令(database command)。前面已經(jīng)介紹過文檔的創(chuàng)建、更新、刪除以及查詢。這些都是數(shù)據(jù)庫命令的使用范疇,包括管理性的任務(wù)(比如關(guān)閉服務(wù)器和克隆數(shù)據(jù)庫)、統(tǒng)計(jì)集合內(nèi)的文檔數(shù)量以及執(zhí)行聚合等。
本節(jié)主要講述數(shù)據(jù)庫命令,在數(shù)據(jù)操作、管理以及監(jiān)控中,數(shù)據(jù)庫命令都是非常有用的。例如,刪除集合是使用"drop"數(shù)據(jù)庫命令完成的:

> db.runCommand({"drop" : "test"});
{
    "nIndexesWas" : 1,
    "msg" : "indexes dropped for collection",
    "ns" : "test.test",
    "ok" : true
}

也許你對(duì)shell輔助函數(shù)比較熟悉,這些輔助函數(shù)封裝數(shù)據(jù)庫命令,并提供更加簡單的接口:

> db.test.drop()

通常,只使用shell輔助函數(shù)就可以了,但是了解它們底層的命令很有幫助。尤其是當(dāng)使用舊版本的shell連接到新版本的數(shù)據(jù)庫上時(shí),這個(gè)shell可能不支持新版數(shù)據(jù)庫的一些命令,這時(shí)候就不得不直接使用runCommand()。
在前面的章節(jié)中已經(jīng)看到過一些命令了,比如,第3章使用getLastError來查看更新操作影響到的文檔數(shù)量:

> db.count.update({x : 1}, {$inc : {x : 1}}, false, true)
> db.runCommand({getLastError : 1})
{
    "err" : null,
    "updatedExisting" : true,
    "n" : 5,
    "ok" : true
}

本節(jié)會(huì)更深入地介紹數(shù)據(jù)庫命令,一起來看看這些數(shù)據(jù)庫命令到底是什么,到底是怎么實(shí)現(xiàn)的。本節(jié)也會(huì)介紹MongoDB提供的一些非常有用的命令。在shell中運(yùn)行db.listCommands()可以看到所有的數(shù)據(jù)庫命令。

數(shù)據(jù)庫命令工作原理

數(shù)據(jù)庫命令總會(huì)返回一個(gè)包含"ok"鍵的文檔。如果"ok"的值是1,說明命令執(zhí)行成功了;如果值是0,說明由于一些原因,命令執(zhí)行失敗。
如果"ok"的值是0,那么命令的返回文檔中就會(huì)有一個(gè)額外的鍵"errmsg"。它的值是一個(gè)字符串,用于描述命令的失敗原因。例如,如果試著在上一節(jié)已經(jīng)刪除的集合上再次執(zhí)行drop命令:

> db.runCommand({"drop" : "test"});
{ "errmsg" : "ns not found", "ok" : false }

MongoDB中的命令被實(shí)現(xiàn)為一種特殊類型的查詢,這些特殊的查詢會(huì)在$cmd集合上執(zhí)行。runCommand只是接受一個(gè)命令文檔,并且執(zhí)行與這個(gè)命令文檔等價(jià)的查詢。于是,drop命令會(huì)被轉(zhuǎn)換為如下代碼:

db.$cmd.findOne({"drop" : "test"});

當(dāng)MongoDB服務(wù)器得到一個(gè)在$cmd集合上的查詢時(shí),不會(huì)對(duì)這個(gè)查詢進(jìn)行通常的查詢處理,而是會(huì)使用特殊的邏輯對(duì)其進(jìn)行處理。幾乎所有的MongoDB驅(qū)動(dòng)程序都會(huì)提供一個(gè)類似runCommand的輔助函數(shù),用于執(zhí)行命令,而且命令總是能夠以簡單查詢的方式執(zhí)行。
有些命令需要有管理員權(quán)限,而且要在admin數(shù)據(jù)庫上才能執(zhí)行。如果在其他數(shù)據(jù)庫上執(zhí)行這樣的命令,就會(huì)得到一個(gè)"access denied"(訪問被拒絕)錯(cuò)誤。如果當(dāng)前位于其他的數(shù)據(jù)庫,但是需要執(zhí)行一個(gè)管理員命令,可以使用adminCommand而不是runCommand:

> use temp
switched to db temp
> db.runCommand({shutdown:1})
{ "errmsg" : "access denied; use admin db", "ok" : 0 }
> db.adminCommand({"shutdown" : 1})

MongoDB中,數(shù)據(jù)庫命令是少數(shù)與字段順序相關(guān)的地方之一:命令名稱必須是命令中的第一個(gè)字段。因此, {"getLastError" : 1, "w" : 2}是有效的命令,而{"w" : 2, "getLastError" : 1}不是。

上一篇文章:MongoDB指南---8、特定類型的查詢
下一篇文章:MongoDB指南---10、索引、復(fù)合索引 簡介

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/44103.html

相關(guān)文章

  • MongoDB指南---9、游標(biāo)數(shù)據(jù)庫命令

    摘要:例如在中,可以用產(chǎn)生一個(gè)的隨機(jī)數(shù)這樣,想要從集合中查找一個(gè)隨機(jī)文檔,只要計(jì)算一個(gè)隨機(jī)數(shù)并將其作為查詢條件就好了,完全不用偶爾也會(huì)遇到產(chǎn)生的隨機(jī)數(shù)比集合中所有隨機(jī)值都大的情況,這時(shí)就沒有結(jié)果返回了。指定本次查詢中掃描文檔數(shù)量的上限。 上一篇文章:MongoDB指南---8、特定類型的查詢下一篇文章:MongoDB指南---10、索引、復(fù)合索引 簡介 數(shù)據(jù)庫使用游標(biāo)返回find的執(zhí)行結(jié)果...

    sutaking 評(píng)論0 收藏0
  • MongoDB指南---14、特殊的索引和集合:固定集合、TTL索引、全文本索引

    摘要:固定集合不能被分片。為固定集合指定文檔數(shù)量限制時(shí),必須同時(shí)指定固定集合的大小。沒有索引的集合默認(rèn)情況下,每個(gè)集合都有一個(gè)索引。 上一篇文章:MongoDB指南---13、索引類型、索引管理下一篇文章:MongoDB指南---15、特殊的索引和集合:地理空間索引、使用GridFS存儲(chǔ)文件 本章介紹MongoDB中一些特殊的集合和索引類型,包括: 用于類隊(duì)列數(shù)據(jù)的固定集合(capped...

    cikenerd 評(píng)論0 收藏0
  • MongoDB指南---14、特殊的索引和集合:固定集合、TTL索引、全文本索引

    摘要:固定集合不能被分片。為固定集合指定文檔數(shù)量限制時(shí),必須同時(shí)指定固定集合的大小。沒有索引的集合默認(rèn)情況下,每個(gè)集合都有一個(gè)索引。 上一篇文章:MongoDB指南---13、索引類型、索引管理下一篇文章:MongoDB指南---15、特殊的索引和集合:地理空間索引、使用GridFS存儲(chǔ)文件 本章介紹MongoDB中一些特殊的集合和索引類型,包括: 用于類隊(duì)列數(shù)據(jù)的固定集合(capped...

    QLQ 評(píng)論0 收藏0
  • (翻譯) MongoDB(19) mongo Shell

    摘要:概述是的交互式接口你可以使用查詢和更新數(shù)據(jù)以及執(zhí)行管理操作是發(fā)行版的一個(gè)組件一旦你已經(jīng)安裝并且啟動(dòng)了連接到你運(yùn)行的實(shí)例在手冊(cè)的大部分示例都是使用然而許多驅(qū)動(dòng)程序?yàn)樘峁┝祟愃频慕涌趩?dòng)重要在嘗試運(yùn)行之前確保正在運(yùn)行啟動(dòng)并使用默認(rèn)端口連接到本地 概述 mongo shell 是 MongoDB的交互式 JavaScript 接口. 你可以使用 mongo shell 查詢和更新數(shù)據(jù)以及執(zhí)行...

    張率功 評(píng)論0 收藏0
  • MongoDB指南---10、索引、復(fù)合索引 簡介

    摘要:可以通過來強(qiáng)制使用某個(gè)特定的索引,再次執(zhí)行這個(gè)查詢,但是這次使用,作為索引。 上一篇文章:MongoDB指南---9、游標(biāo)與數(shù)據(jù)庫命令下一篇文章:MongoDB指南---11、使用復(fù)合索引、$操作符如何使用索引、索引對(duì)象和數(shù)組、索引基數(shù) 本章介紹MongoDB的索引,索引可以用來優(yōu)化查詢,而且在某些特定類型的查詢中,索引是必不可少的。 什么是索引?為什么要用索引? 如何選擇需要建立...

    enrecul101 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<