mongodb安裝與基本尋找操作:學習整理(一),mongodb尋找

來源:互聯網
上載者:User

mongodb安裝與基本尋找操作:學習整理(一),mongodb尋找

**

windows下MongoDB的安裝及配置:

**
安裝參考文章:http://www.cnblogs.com/jiaxuekai/p/7204716.html
https://jingyan.baidu.com/article/ed15cb1b52b8661be2698162.html
http://www.weste.net/2014/10-31/99742.html
[MongoDB服務無法啟動,windows提示發生服務特定錯誤:100]
(http://www.cnblogs.com/BGOnline/p/6813804.html:)
管理員帳號密碼設定:以及關於登陸報錯設定http://blog.csdn.net/q1056843325/article/details/70941697

基本概念與操作:

_id和ObjectId
MongoDB 中儲存的文檔必有一”_id” 鍵。這個鍵的值可以是任何類型的,預設是個ObjectId 對象。在一個集合裡面,每個文檔都有唯一的”_id” 值,來確保集合裡面每個文檔都能被唯一標識。如果有兩個集合的話,兩個集合可以都有一個值為123 的”_id” 鍵,但是每個集合裡面只能有一個”_id” 是123 的文檔。
1. ObjectId
ObjectId 是”_id” 的預設類型。它設計成輕量型的,不同的機器都能用全域唯一的同種方法方便地產生它。這是MongoDB 採用ObjectId,而不是其他比較常規的做法(比如自動增加的主鍵)的主要原因,因為在多個伺服器上同步自動增加主索引值既費力還費時。MongoDB 從一開始就設計用來作為分散式資料庫,處理多個節點是一個核心要求。後面會看到ObjectId 類型在分區環境中要容易產生得多。

ObjectId 使用12 位元組的儲存空間,每個位元組兩位十六進位數字,是一個24 位的字串。由於看起來很長,不少人會覺得難以處理。但關鍵是要知道這個長長的ObjectId 是實際儲存資料的兩倍長。

如果快速連續建立多個ObjectId,會發現每次只有最後幾位元字有變化。另外,中間的幾位元字也會變化(要是在建立的過程中停頓幾秒鐘)。這是ObjectId 的建立方式導致的。12 位元組按照如下方式產生:

接下來的3 位元組是所在主機的唯一識別碼。通常是機器主機名稱的散列值。這樣就可以確保不同主機產生不同的ObjectId,不產生衝突。
為了確保在同一台機器上並發的多個進程產生的ObjectId 是唯一的,接下來的兩位元組來自產生ObjectId 的進程標識符(PID)。

前9 位元組保證了同一秒鐘不同機器不同進程產生的ObjectId 是唯一的。後3 位元組就是一個自動增加的計數器,確保相同進程同一秒產生的ObjectId 也是不一樣的。同一秒鐘最多允許每個進程擁有2563(16 777 216)個不同的ObjectId。
2. 自動產生_id
如果插入文檔的時候沒有”_id” 鍵,系統會自動幫你建立一個。可以由MongoDB 伺服器來做這件事情,但通常會在用戶端由驅動程式完成。理由如下。

雖然ObjectId 設計成輕量型的,易於產生,但是畢竟產生的時候還是產生開銷。在用戶端產生體現了MongoDB 的設計理念:能從伺服器端轉移到驅動程式來做的事,就盡量轉移。這種理念背後的原因是,即便是像MongoDB 這樣的可擴充資料庫,擴充應用程式層也要比擴充資料庫層容易得多。將事務交由用戶端來處理,就減輕了資料庫擴充的負擔。

在用戶端產生ObjectId,驅動程式能夠提供更加豐富的API。例如,驅動程式可以有自己的insert 方法,可以返回產生的ObjectId,也可以直接將其插入文檔。如果驅動程式允許伺服器產生ObjectId,那麼將需要單獨的查詢,以確定插入的文檔中的”_id” 值。

**MongoDB文法與現有關係型資料庫SQL文法比較 MongoDB文法 MySql文法**-------------------------------------------db.test.find({'name':'foobar'})<==> select * from test where name='foobar'db.test.find()                            <==> select *from testdb.test.find({'ID':10}).count()<==> select count(*) from test where ID=10db.test.find().skip(10).limit(20)<==> select * from test limit 10,20db.test.find({'ID':{$in:[25,35,45]}})<==> select * from test where ID in (25,35,45)db.test.find().sort({'ID':-1})  <==> select * from test order by IDdescdb.test.distinct('name',{'ID':{$lt:20}})  <==> select distinct(name) from testwhere ID<20db.test.group({key:{'name':true},cond:{'name':'foo'},reduce:function(obj,prev){prev.msum+=obj.marks;},initial:{msum:0}})  <==> select name,sum(marks) from testgroup by namedb.test.find('this.ID<20',{name:1})  <==> select name from test whereID<20db.test.insert({'name':'foobar','age':25})<==>insertinto test ('name','age') values('foobar',25)db.test.remove({})                        <==> delete * from testdb.test.remove({'age':20})            <==> delete test where age=20db.test.remove({'age':{$lt:20}})   <==> elete test where age<20db.test.remove({'age':{$lte:20}})  <==> delete test where age<=20db.test.remove({'age':{$gt:20}})  <==> delete test where age>20db.test.remove({'age':{$gte:20}})<==> delete test where age>=20db.test.remove({'age':{$ne:20}})  <==> delete test where age!=20db.test.update({'name':'foobar'},{$set:{'age':36}})<==> update test set age=36 where name='foobar'db.test.update({'name':'foobar'},{$inc:{'age':3}})<==> update test set age=age+3 where name='foobar'

參考文獻:

   
0
0
查看評論

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.