MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف...

90
MongoDB ضگغا ؿ صاص ثب پبیگبیبی آك مهندسبهامی معصومه اwww.ParsBook.org

Transcript of MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف...

Page 1: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

MongoDB آكبیی ثب پبیگب صاص ؿضگغا

معصومه ابهامیمهندس

www.ParsBook.org

Page 2: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

فغؿت

همضه

فول ال

mongoDBهؼغفی

فول صم

mongoDBهفبین هجص صع

فول ؿم

mongoDBكغع کبع ثب

چبعمفول

پغؽ جب

فول پجن

Sharding

فول كلن

Aggregation ب

فول فتن

ایضکؾ گظاعی

فول لتن

mongoDBهضیغیت صع پبیگبص صاص ی

فول ن

Replication ب

www.ParsBook.org

Page 3: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

ضویو ی یک

mongoDBوت

ضویو ی ص

صاص پبیگب shellآكبیی ثب

ضویو ی ؿ

Bson-

Wire Protocol-

Data Files-

Namespaces and Extents-

www.ParsBook.org

Page 4: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

همضه

ثب ادتغام تمضین ث سباص ی ثؼعگ ػلن اصة

ثب جص کبؿتی بی ػیبص صع سضهت كوب ػؼیؼاى لغاع گغفت اؿت ک اهیضاعم ایي ـش

اصاه ی عا گبعف عػ ای ثبكض ثغای عص ث صیبی ثؼعگ پبیگب صاص بی ؿض گغا

.بی ثبالتغ ثتغـش

وبطع ک یچ كت ای سبلی اػ ػیت ایغاص یـت ثبثغایي ثض عا هفتشغ هی وبییض اگغ

ی ایي كت هغا کوک وبییضکبؿتی ػیت بصع یبفتي

ا ث صعسع لیبلت كوب ػؼیؼاى ع ن كت ای هب ثب تالف ؿؼی صع عفغ الن صاعین تب ثتای

كوب تمضین وبیین

ثب تلکغ

هؼوه اثبهی

19-19 ػهـتبى

www.ParsBook.org

Page 5: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

فول ال mongoDBهؼغفی

www.ParsBook.org

Page 6: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

mongoDB میبؽ پظیغ اؿت.ایي پبیگب صاص تابیی هیک پبیگب صاص لی هؼطف

scale out پبیگب صاص بی عاثط ای هخل ایضکؾ گظاعی کغصى سیلی اػ یژگی بی

صاه ی پغؽ جب طسیغ ؿبػی عا صاعا هی ثبكض.

mongoDB سیلی اػ یژگی ب هخل ث طع ثبع کغصی پغ یژگی اؿت.built-in ثصى

MapReduce-style aggregation MapReduce-styleپلتیجبی کغصى اػ

aggregation ک ثؼضا صع هعص غکضام هطبلجی عا ساین آهست ثبكضصاعا هی عا.

mongoDB یک هضل صاص ایDeveloper پـض صاعای پیکغثضیadministrator پـض

اؿت

پبیگب صاص shellب Driverثؿیل ی ػوهیبی ػثبى بی API وچیي صاعای

اؿت.

mongoDB ی اػ هلکل یـی ثضى گغاثغبه ؿی تالف هی کض ک عا كوب عا ث

سیغ صاص ب تغییغ ثضضط

mongoDB یک هضل صاص ای غی

mongoDB .صلیل اهلی ثغای یک پبیگب صاص ؿضگغا اؿت یک پبیگب صاص ی عاثط ای

اؿت اهب mongoDBػثبى ثصى scale out تابیی کبع گضاكتي صیتبثیؾ بی عاثط ای

صاعص.یؼ ؿبیغ هؼایببی صیگغ عا

ثب یک هضل اؼطبف پظیغتغ rowجبیگؼیي کغصى هفم mongoDBطغادی ایض ی پبی صع

ث کبعثغ هی اؿت ؿضگغایی اهکبى ایجبص ؿض بی صاسلی آعای ب عا documentث بم

صض

.عا هی ثبكضایؼ ص ثصى صیتبثیؾ عایب وى ثضى كوب scheme-less وچیي

www.ParsBook.org

Page 7: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

Easy scaling

ثب تج ث ؿغػت عكض دجن صاص ب پیلغی صع ایي تکلژی دجن اطالػبتی ک صع

هضیغیت جبهؼی اصاع کغصى ایي اطالػبت ػیبص ثغای صاص یبػ ث طسیغ ؿبػی صاعض پبیگب

ادـبؽ هی كص.

چگ پبیگب صاص سص عا همیبؽ پظیغ کین؟

هی عؿینگؼی ثغای همیبؽ پظیغ کغصى پبیگب صاص ث ص

9-scalling up)ثؼعگ کغصى هبكیي ب(

9-scalling out)پبعتیلي ثضی کغصى صع ثیي چضیي هبكیي(

اػ آجبیی ک ایجبص هبكیي ثؼعگ همغى ث هغف یـت وچیي یبػ ث فضبی ثؼعگتغی

ت ک ثغای اضبف کغصى ثبال اؿ تغ لتوبصی ا تغکغصى تؿؼ پظیغ scalling out صاعص

کبعایی هی تاى یک ؿغع هبؿت سة سغیضاعی کغص ث هجوػ سص اضبف ثغصى

)ثؼضب صع ایي کتبة ث ایي هجوػ کالؿتغ یؼ گفت هی كص(کغص.

mongoDB ثغ پبی یscale out ؿضگغا ثصى هضل صاص ب ایي است شده طراحیثصى

اجبػ عا هی صض ک صاص ب ث طع جضاگب صع عی چضیي ؿغع پشق كض ک صاص ب

لص کغصى یک گغ عا ث تؼبصل هی عؿ.تػیغ هجضص صؿت ب اتهبتیک اؿت ک ایي

به یـی ض ک ثغبه یـبى ثضى گغای اػ طسیغ صاص ب عی ثغصاهکبى عا هی

توغکؼ کض ثغای افؼایق ظغفیت صاص ب تب یبػ ث تی ی یک ؿغع صاكت ثبكض ث

آؿبی هلکل ایک چگ صاص ب عا طسیغ کین دل هی كص.

یژگی ب

.صع همبیـ ثب پبیگب صاص بی چگ ثیبى کین mongoصع هلکل اؿت ک یژگی ب عا

غای صیگغ؟ـ ثب صیگغ پبیگب صاص بی ؿضگط ای یب صع همبیعاث

الؼب سة اؿت اثؼاعبی هذوغث فغصی mongoDBساله دغف ایي اؿت ک

صاعص ک صیگغ وتببی علیجق ضاعض.

Indexing : generic secondary indexes پغؽ جبی ؿغیغ یکتبیی

compound لبثلیت geospatial indexing سثی پلتیجبی هی کضث عا.

www.ParsBook.org

Page 8: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

JavaScriptاجبكت ی

ػال ثغ طسیغ ؿبػی اػ تاثغ ثجبی طسیغ ؿبػی عی ب تلیض کض ب هی تاض

value .ب صع ؿوت ؿغع اؿتفبص کض

Aggregation

.پلتیجبی هی کض Aggregation صیگغ اثؼاعبی MapReduceاػ

Fixed-size collections

Capped collections صاعای اضاػ حبثتی ـتض ک ایي یژگی هفیض اؿت ثغای ع

ب. logsهلشوی اػ صاص ب هخل

File storage

mongoDB .اػ یک پغتکل ؿبص ثغای طسیغ ؿبػی صاص ب اؿتفبص هی کض

mongoDBثؼضی اػ یژگی ب ثب پبیگب صاص بی عاثط ای هلتغک اؿت اهب ثؼضی صع

ؿطغی .ػیغا پیبص ؿبػی ایي یژگی ب ض ب یب تغاکق بی پیچیض چ joinجص ضاعص هخل

صع ؿیـتن بی تػیغ یبفت هلکل اؿت.

کبعایی ثبال ثضى اتالف ؿغػت

اؿت اػ ػهبى طغادی ث اجغا صعآهض اؿت mongoDBکبعایی ثبعکغصی ضف االی

ی ث ػاى هص اهلی ثغای فؼل افؼبالت ثب ؿغع اؿتفبص ک اػ پغتکل بی ؿیوی ثبیغ

هی کض.

سیلی لضعتوض اؿت ؿؼی صع گ صاكتي سیلی اػ یژگی بی پبیگب mongoDBاگغچ

صاص بی عاثط ای عا صاكت لی اتشبة سثی ثغای اجبم غچیؼی ک تؿظ پبیگب صاص

بی عاثط ای اجبم هی كص یـت .

هطمی ؿوت کالیت اجبم گیغص offloadصع غ ػهبی هوکي اؿت پغصاػف ث هعت

كض اؿت. mongoDBک ایي طغادی ؿجت ثبال ثغصى کبعایی

www.ParsBook.org

Page 9: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

ػال ثغ عا اضاػی ؿغع پبیگب صاص یبػ ث سیلی اػ هضیغیت بی عیؼ صاعین اگغ یک

جبیگؼیي ؿغع slaveسبهف كص ث هعت اتهبتیک یک ؿغع masterؿغع

master .هی كص

ایي اؿت ک ؿغع ثبیض اصاع كص تب دض اهکبى mongoDBفلـف ی هضیغیت صع

پیکغثضی اتهبتیک ایي اجبػ عا هی صض ک کبعثغاى اتوبلتلبى عا صع هعت یبػ ثبال

ثجغض.

www.ParsBook.org

Page 10: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

فول صم

هفبین هجص صع

mongoDB

www.ParsBook.org

Page 11: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

هی پغصاػین mongoDBصع ایي فول ث ثغعؿی هفبین هجص صع

Document ؿض(یک ادض پبی ثغای صاص ب اؿت هفهی كجی عصیف صع پبیگب صاص(

بی عاثط ای اؿت

Collection هجوػ (هی تاى ثغاثغ یک جضل ثضى كوب ـت(

صاص ب ثبكض ک غ کضام هی تاض یک گغ هـتخل اػ پبیگب mongoDBیک هخبل اػ

هجوػ ب صؿتغؿی بی سبم سص عا صاعص.

mongoDB اػ یک پؿت ی ؿبص یjavaScript ثجص آهض اؿت

" ک صع ثیي ؿض بی یک هجوػ یکتب ـت.id_غ ؿض صاعای یک کلیض هشوم "

Documents

ثیبى هی كص objectک صع جبا اؿکغیپت ؿض ب ث ػاى ی

{ ― greeting‖ : ―hello!‖ }

اؿت.اؿبص !helloثب اعػف greetingصع ایي ؿض ؿبص ک هذتی یک کلیض ث بم

هی تاض پیچیض ثبكض هخل

{―greeting‖ : ―hello!‖ , ―number‖ : 3}

ایي هخبل ث سثی چضیي هفم عا ثیبى هی کض

ؿض ث تغتیت ـتض ثبثغایي ص ؿض ػیغ ثبن تفبت صاعضتغکیت کلیض اعػكق صع 1.

{―number‖ : 3, ‖greeting‖ : ‖hello!‖ }

www.ParsBook.org

Page 12: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

{―greeting‖ : ―hello!‖ , ―number‖ : 3}

.همضاعب صعى یک ؿض هوکي اؿت چضیي ع ثبكض هخال صع هخبل ثبال ن ع عكت صاعین 2

ن ع ػضص.

(\0ثبكض) null.کلیض ب جبیض صاعای کبعاکتغ 3

.کلیض بی ک ثب _ كغع هی كض ث ػاى کلیض بی عػ كض هطغح هی كض اگغچ 4

اججبعی صع ایي هعص جص ضاعص.

mongoDB type-sensitive case-sensitive اؿت ثضیي هؼی ک اؿبص ػیغ ثبن

تفبت صاعض

{"foo" : 3} {"foo" : "3"}

{"foo" : 3} {"Foo" : 3}

: بیی کت ی هن

وی تاض كبهل کلیض بی تکغاعی ثبكض.ثب ایي دـبة ؿض ػیغ mongoDBؿضب صع

غیغلبی اؿت

{“greeting” : “hello!”,”greeting” : “hello word!”}

www.ParsBook.org

Page 13: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

بم گظاعی هجوػ ب

ثب یکـغی اػ هذضصیت ب اؿتفبص کغص utf-8ثغای بم گضاعی هی تاى اػ فغهت

جبكض (““)عكت ی سبلی -9

(\0جبكض) nullكبهل کبعاکتغ -9

ثبكض ػیغا ایي بم گضاعی ثغای هجوػ بی ؿیـتوی .systemجبیض صاعای پیلض -3

كبهل یػعبی پبیگب صاص اؿت. system.users عػ كض اؿت هبض

ثبكض $غیف هی كص جبیض كبهل کبعاکتغ هجو ػ بیی ک تؿظ کبعثغ تؼ -4

پبیگب صاص

غ پبیگب صاص صع فبیل . هجوػ ای اػ هجوػ ب تلکیل یک پبیگب صاص عا هی صض

جضاگب ثب صؿتغؿی بی سبم سص طسیغ هی كص.

لایي بم گظاعی پبیگب صاص

( ثبكض““جبیض كبهل عكت تی ) -9

ثبكض nullیب کبعاکتغ \ / $ . ( ’‘)جبیض صاعای کبعاکتغبی -9

ثبیض اػ دغف کچک اؿتفبص كص -3

ثبیت ثبكض 44هبکؼیون بم پبیگب صاص ثبیض -4

ک هی تاین ث آب صؿتغؿی هـتمین صاكت ثبكین mongoDBصیتبثیؾ بی عػ كض صع

كبهل:

Admin

www.ParsBook.org

Page 14: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

adminض اگغ یک یػع ث ب هی ثبك authenticationصیتبثیؾ عیل اؿت ک كبهل

ب عا ث اعث هی ثغص.authentication اضبف كص ث طع اتهبتیک صؿتغؿی ثغا

Local

ایي پبیگب صاص صثبع ؿبست وی كص ثغای صسیغ ؿبػی غ هجوػ ای ک ثبیض عی

ثبكض اؿتفبص هی گغصص. localیک ؿغع هفغص

Config

ب اؿتفبص هی كص. shardطسیغ ؿبػی اطالػبت صع هعص shardedصع ؿوت

ػهبی ک اؿن پبیگب صاص عا وغا ثب اؿن هجوػ هی یـین یک فضبی بم جبهؼی عا

صع پبیگب blog.postثغای هخبل هجوػ ی بم صاعص namespaceتلیض هی کین ک

م هی كص ک ایي فضبی یک فضبی ب cms.blog.postجص صاعص ک cmsصاص ی

ثبیت ثبكض. 900ثبیت دضالل 999بم صاعای طل دضاکخغ

www.ParsBook.org

Page 15: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

فول ؿم

mongoDBكغع کبع ثب

www.ParsBook.org

Page 16: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

mongoDBكغع کبع ثب

عا وت کغص این mongoDBاثتضا اعص هـیغی ک mongoDBثغای کبع ثب پؿت

تب ؿغع صیتبثیؾ كغع عا اجغا هی کین mongod صؿتع cmdهی كین ؿپؾ صع

ث ایي کت تج کیض ک هی یـین mongo صیگغی عا ثبػ کغص cmdثکبع کض

اؿتفبص هی وبیین ctrl cواع ثغای ثـتي ؿغع اػ کلیض تغکیجی

یچ کغصى ث یک ئهتول هی كین ثغای ؿ testث هعت پیق فغى ث پبیگب صاص

غ اػ صؿتع پبیگب صاص ی صیگ

> use tutorial

www.ParsBook.org

Page 17: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

switched to db tutorial

هتمل كض این tutorialاؿتفبص هی کین ثغای هخبل صع صؿتئغ ثبال ث صیتبثیؾ

این یچ کغص ؿئ tutorialایي اؿت ک هب ث صیتبثیؾ mongoDBیک اتفبق جبلت صع

ثضى ایک آى عا ایجبص کین.صع دمیمت یبػی یـت ک هب صیتبثیؾ عا ایجبص عا کین ػیغا

ث هعت documentب صع هلغ اعص کغص الیي collectionصیتبثیؾ

runTime ؿبست هی كض

ساین یک ؿض هخل ؿض ػیغ ثغای تهیف کبعثغ ایجبص ک هب هی ثغای هخبل فغى کیض

کین

{username: "ashli"}

صؿتعات ػیغ عا ث تغتیت صجبل هی کین

ثغای اعص کغصى الیي ؿض سص ث یک هجوػ یبػ صاعین ک ثب صؿتع ػیغ الیي

هجوػ الیي ؿض سص عا ایجبص هی کین

> db.users.insert({username: "ashli"})

اگغ صلت کین پؾ اػ اعص کغصى صؿتع اجغای آى یک تبسیغ بچیؼی عا ادـبؽ هی

فضب صی ث ایي ایي تبسیغ بكی اػ ػهبى الػم ثغای ایجبص صیتبثیؾ هجوػ .کین

ص صع عی صیـک هی ثبكض.

ث صعؿتی طسیغ ؿض هطوئي هی كین کپؾ اػ صعؿت اعص کغصى ؿض ثب صؿتع ػیغ

كض اؿت

> db.users.find()

كت ی ػیغ صع سغجی ظبغ هی گغصص ,پؾ اػ اجغا

{ _id : ObjectId("4bf9bec50e32f82523389314"),

username : "smith" }

www.ParsBook.org

Page 18: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

ث ؿض هب اضبف هی كص ک ایي كبؿ دکن کلیض id_ ساین صیض ک یک ,اگغ صلت کین

یک كبؿ ث ؿض هب ث ,ایجبص غ ؿض.صع دمیمت صع ػهبى صاعص اهلی عا ثغای هب

.یکتبؿت,ي كبؿ صع ثیي ؿضبی یک هجوػای.هعت سصکبع اضبف هی گغصص

طجك هغادل ػیغ صاعینسص هجوػ یجضیض ث ؿض ثغای اضبف کغصى یک

> db.users.save({username: "jones"})

جص صاكت ثبكض ؿضدبال ثبیض صع هجوػ ی هب ص

> db.users.count() 2

ثغای هلبض ی توبم اؿبص هجص صع هجوػ صاعین:

> db.users.find() { _id : ObjectId("4bf9bec50e32f82523389314"), username :"ashli" } { _id : ObjectId("4bf9bec90e32f82523389315"), username : "jones" }

بم کبعثغی ثغاثغ وچیي ثب اؿتفبص اػ صؿتع ؿبص ػیغ الضام ث اتشبة یک ؿض دبی

jones صع هجوػ ی هعص ظغ هی کین

> db.users.find({username: "jones"}) { _id : ObjectId("4bf9bec90e32f82523389315"), username : "jones" }

ثغػ عؿبی

یبػ ث ص آعگهبى صاعین. updateصع و ی ػولیبت

آعگهبى ال ک ؿض هعص ظغ ثغای آپضیت عا هلشن هی کض آعگهبى صم هلشن هی

کض چگ ؿض سص عا ثغػ کین

عا یؼ اضبف کین countryهعص ashliثغای هخبل لوض صاعین ثغای کبعثغ

> db.users.update({username: "ashli"}, {$set: {country: "Canada"}})

ashliصؿتع ػیغ عا اجغا کین .هلبض هی كص ک ث ؿض دبی بم کبعثغی دبل اگغ

یؼ اضبف كض اؿت countryهعصی ثبم

www.ParsBook.org

Page 19: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

> db.users.find({username: "ashli"}) { "_id" : ObjectId("4bf9ec440e32f82523389316"), "country" : "Canada", username : "ashli}

عا دظف کین کبفی ؿت countryظغ گؼی ی دبل اگغ ثشاین ثغای کبعثغ هعص

صؿتع ػیغ عا اجغا وبیین

> db.users.update({username: " ashli "}, {$unset: {country: 1}})

ثغای ؿبستبعبی پیچیض تغ هبض طیغ ؿبػی پغفبیل یک کبعثغ ک صاعای لیـتی اػ

favorites : اؿت صاعین

{ username: " ashli ", favorites: { cities: ["Chicago", "Cheyenne"], movies: ["Casablanca", "For a Few Dollars More", "The Sting"] { }

ػیغ اؿتفبص کغصوچیي هی تاى ثجبی اػ كتي ؿض اػ صؿتع

> db.users.update( {username: " ashli "}, { $set: {favorites: { cities: ["Chicago", "Cheyenne"], movies: ["Casablanca", "The Sting"] } }

})

ثغاثغmovies هضی بیق صع كوب هی سایض کبعثغای عا پیضا کیض ک ػاللثغای هخب ل

"Casablanca" اؿت

> db.users.find({"favorites.movies": "Casablanca"})

هتع جـتج ایي صؿتع عا هی صض ک کلیض ث favorites movies ).( ثیي مط

favorites عا پیضا کي ک كبهل کلیض صعی movies اعػف هـبی ثبCasablanca كضثب

www.ParsBook.org

Page 20: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

ثغای هخبل بی ثیلتغ كوب فغى کیض ک ثب تج ث صاق سص هی صاین ک غکـی ک

Casablanca عا صؿت صاعص ث طع دتنthe maltese falcon عا یؼ صؽ صاعص

set$عا ال ایـت ک اػ ػولگغ .ثغای ثغػعؿبی صیتبثیؾ ثغای وبیق ایي الؼیت

صاكت moviesاؿتفبص کین لی ثغای اؿتفبص اػیي ػولگغ یبػ ث صثبع یـی آعای ی

$ اؿتفبص کین .صعدمیمت push addToSet$ثبكین .عا دل صم ایـت ک اػ ص ػولگغ

اعص اػایي ص ػولگغ ػوغ جضیضی ث آعای اضبف هی کض ثب ایي تفبت ک ػولگغ صم

اعی جلگیغی هی کض.ثب اجغای صؿتع ػیغ صاعین:کغصى ػوغ تکغ

db.users.update( {"favorites.movies": "Casablanca"}, {$addToSet: {"favorites.movies": "The Maltese Falcon"} }, false, true )

آعگهبى ال كغط ثغای پیضا کغصى ؿض هعص ظغ اؿت.آعگهبى صم صؿتع اضبف کغصى

ػوغ جضیض صع هعص آعگهبى ؿم ثؼضا تضیخ ساین صاص آعگهبى چبعم ایي عا

هی ثبكض. multi-updateهلشن هی کض ک ایي صؿتع یک

ظف کغصى صاصد

صؿتع ػیغ عا اعص هی وبیین fooثغای دظف کغصى یک هجوػ ثبم

> db.foo.remove()

اپغ یبػ صاكت ثبكین ک ػیغهجوػ ی سبهی اػ یک هجوػ عا دظف وبیین ثب اؿتفبص اػ

صؿتع ػیغ الضام ث آى دظف آى ؿض یب ػیغهجوػ هی وبیین

> db.users.remove({"favorites.cities": "Cheyenne"})

هجوػ عا دظف وی کض ثلک توبم اؿبص صعى removeكین ک صؿتع ثبیض تج صاكت ثب

اؿتفبص dropبیق اػ صؿتع indexآى پبک هی كض.ثغای دظف کبهل هجوػ ثب توبم

هی وبیین

> db.users.drop()

www.ParsBook.org

Page 21: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

ایجبص هجوػ بی ثؼعگ

ایي اؿت ک ثطغیك آى هی تاى ث یک هجوػ تؼضاص ػیبصی indexingیک هخبل ثغای

هی تاى ثب اؿتفبص اػ صؿتع shellاؿبص ث یک ثبع اضبف کغص هخال صع

for(i=0; i<200000; i++) { db.numbers.save({num: i}); }

اػ shellث صلیل ایک ) اضبف کغصین numbersؿض ث هجوػ ی 200000ث تؼضاص

پلتیجبی هی کض پؾ صؿتع ثبال لبثل لجل اؿت( javaScriptهفـغ

تیج...

> db.numbers.count() 200000

> db.numbers.find() { "_id" : ObjectId("4bfbf132dba1aa7c30ac830a"), "num" : 0 } { "_id" : ObjectId("4bfbf132dba1aa7c30ac830b"), "num" : 1 } { "_id" : ObjectId("4bfbf132dba1aa7c30ac830c"), "num" : 2 } { "_id" : ObjectId("4bfbf132dba1aa7c30ac830d"), "num" : 3 } { "_id" : ObjectId("4bfbf132dba1aa7c30ac830e"), "num" : 4 } { "_id" : ObjectId("4bfbf132dba1aa7c30ac830f"), "num" : 5 } { "_id" : ObjectId("4bfbf132dba1aa7c30ac8310"), "num" : 6 } { "_id" : ObjectId("4bfbf132dba1aa7c30ac8311"), "num" : 7 } { "_id" : ObjectId("4bfbf132dba1aa7c30ac8312"), "num" : 8 } { "_id" : ObjectId("4bfbf132dba1aa7c30ac8313"), "num" : 9 } { "_id" : ObjectId("4bfbf132dba1aa7c30ac8314"), "num" : 10 } { "_id" : ObjectId("4bfbf132dba1aa7c30ac8315"), "num" : 11 } { "_id" : ObjectId("4bfbf132dba1aa7c30ac8316"), "num" : 12 } { "_id" : ObjectId("4bfbf132dba1aa7c30ac8317"), "num" : 13 } { "_id" : ObjectId("4bfbf132dba1aa7c30ac8318"), "num" : 14 } { "_id" : ObjectId("4bfbf132dba1aa7c30ac8319"), "num" : 15 } { "_id" : ObjectId("4bfbf132dba1aa7c30ac831a"), "num" : 16 } { "_id" : ObjectId("4bfbf132dba1aa7c30ac831b"), "num" : 17 } { "_id" : ObjectId("4bfbf132dba1aa7c30ac831c"), "num" : 18 } { "_id" : ObjectId("4bfbf132dba1aa7c30ac831d"), "num" : 19 }

www.ParsBook.org

Page 22: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

ثغای صیضى ثمی هجوػ کبفیـت ثیـین

> it { "_id" : ObjectId("4bfbf132dba1aa7c30ac831e"), "num" : 20 } { "_id" : ObjectId("4bfbf132dba1aa7c30ac831f"), "num" : 21 } { "_id" : ObjectId("4bfbf132dba1aa7c30ac8320"), "num" : 22 } ...

ک ث تغتیت ثیبگغ )ثؼعگتغ اػ( یب )کچکتغ اػ( gt $lt$وچیي ثب اؿتفبص اػ صؿتع

اؿت هی تاى پغؽ جبی ػیغ عا صاكت ثبكین

> db.numbers.find( {num: {"$gt": 199995 }} ) { "_id" : ObjectId("4bfbf1dedba1aa7c30afcade"), "num" : 199996 } { "_id" : ObjectId("4bfbf1dedba1aa7c30afcadf"), "num" : 199997 } { "_id" : ObjectId("4bfbf1dedba1aa7c30afcae0"), "num" : 199998 } { "_id" : ObjectId("4bfbf1dedba1aa7c30afcae1"), "num" : 199999 }

> db.numbers.find( {num: {"$gt": 20, "$lt": 25 }} ) { "_id" : ObjectId("4bfbf132dba1aa7c30ac831f"), "num" : 21 } { "_id" : ObjectId("4bfbf132dba1aa7c30ac8320"), "num" : 22 } { "_id" : ObjectId("4bfbf132dba1aa7c30ac8321"), "num" : 23 } { "_id" : ObjectId("4bfbf132dba1aa7c30ac8322"), "num" : 24 }

Explain()

اثتضا ثب یک هخبل كغع هی کین ()explainثغای آكبیی ثب

> db.numbers.find( {num: {"$gt": 199995 }} ).explain()

اگغثبال عا اجغا وبیین هلبض هی کین ک تبیج ػیغ ث هب ثغگغصاض هی كص

{ "cursor" : "BasicCursor", "nscanned" : 200000, "nscannedObjects" : 200000,

www.ParsBook.org

Page 23: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

"n" : 4, "millis" : 171, "nYields" : 0, "nChunkSkips" : 0, "isMultiKey" : false, "indexOnly" : false, "indexBounds" : { } }

سص ایضکؾ ثگظاعین numهب هی تاین ثب اؿتفبص اػ صؿتع ػیغ ثغی کلیض

> db.numbers.ensureIndex({num: 1})

عا ایجبص numberصع هجوػ ی num صؿتع ثبال ایضکؾ گظاعی هؼصی عا عی کلیض

هلشن هی كص ک ایضکؾ گظاعی اجبم ()getindexes.ثب اؿتفبص اػ صؿتع هی کض

گغفت كض اؿت

> db.numbers.getIndexes() [ {query "name" : "_id_", "ns" : "tutorial.numbers", "key" : { "_id" : 1 } }, { "_id" : ObjectId("4bfc646b2f95a56b5581efd3"), "ns" : "tutorial.numbers", "key" : { "num" : 1}, "name" : "num_1"} ]

دبل اگغ صؿتع لجلی عا اجغا وبیین هلبض هی کین ک

> db.numbers.find({num: {"$gt": 199995 }}).explain() { "cursor" : "BtreeCursor num_1", "indexBounds" : [

www.ParsBook.org

Page 24: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

[ { "num" : 199995}, { "num" : 1.7976931348623157e+308} ] ], "nscanned" : 5, "nscannedObjects" : 4, "n" : 4, "millis" : 0 }

1هیلی حبی ث کوتغ اػ 171هلبض هی كص ک ثب ایضکؾ گظاعی ػهبى پغؽ ج اػ

هیلی حبی کبق پیضا کغص اؿت.

هضیغیت پبیگب صاص

www.ParsBook.org

Page 25: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

فول چبعم

پغؽ جب

www.ParsBook.org

Page 26: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

وبى طع ک اػ لجل هی صاین ثغای وبیق غچیؼی ک صعى یک هجوػ اؿت اػ صؿتع

ػیغ اؿتفبص هی وبیین

> db.c.find()

عا ثغهی گغصاض cصؿتع ثبال توبم ػبهغ هجوػ ی

ثغگغصاض كص کبفی ؿت ثیـین age=26 دبل اگغ ثشاین ػبهغ ثب

> db.users.find({"age" : 27})

ثغای لغاع صاصى كغط چضتبیی طجك ػیغ ػول هی کین

Condition1 and condition2 and …

> db.users.find({"username" : "joe", "age" : 27})

جـتج کبفی ؿت اعػف کلیض هعص ظغ عا دبهل اػثغای هلشن کغصى کلیضبی ثغگلتی

کین 1

> db.users.find({}, {"username" : 1, "email" : 1}) { "_id" : ObjectId("4ba0f0dfd22aa494fd523620"), "username" : "joe", "email" : "[email protected]" }

صع هعت اتشبة کغصى یب اتشبة کغصى صع تیج id_تج صاكت ثبكیض ک واع کلیض

هب ظبغ هی كص

www.ParsBook.org

Page 27: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

0اگغ ثشاین و ی کلیض ب ثجؼ کلیض هعصظغ ثغگلت صاص كض اعػف کلیض هعصظغ عا

هی کین

> db.users.find({}, {"fatal_weakness" : 0})

صع تبیج جـتج جلگیغی کض id_صؿتع ػیغ هی تاض اػ ظبغ كضى

> db.users.find({}, {"username" : 1, "_id" : 0}) { "username" : "joe",{

كغط ب

ػجبعات همبیـ ای كبهل هاعص ػیغ اؿت

"$lt", "$lte", "$gt", "$gte", <, <=,>, >= > db.users.find({"age" : {"$gte" : 18, "$lte" : 30}})

ؿبل ـتض 30تب 18صؿتع ثبال کبعثغای عا ثغهی گغصاض ک صاعای عج ؿی ثیي

ػض كض اض عا ثغهی 2007/01/01کبعثغای عا ک لجل اػ وچیي صؿتع ػیغ ک

گغصاض> start = new Date("01/01/2007") > db.users.find({"registered" : {"$lt" : start}})

صؿتعی یـت اػ )ج(ثغاثغ اعػف عصی )بم کبعثغی(ثغای اتشبة اؿبصی ک اعػكق

هلبث ػیغ اؿتفبص هی کین > db.users.find({"username" : {"$ne" : "joe"}})

ثب غ ع صاص ای ثکبع ثغص هی كص "$ne"

Or queries " ک ثغی یک in$جص صاعص الیي عا اؿتفبص اػ " orص عا ثغای اجبم پغؽ جب ثب

صاكتي کلیض اجبم هی گیغص هبض هخبل ػیغ ک ثغضگبى هـبثم ی ثشت آػهبیی عا صع هت

عا هلشن هی کض 8 5 3یکی اػ ثلیظ بی ثب كوبع

> db.raffle.find({"ticket_no" : {"$in" : [3, 5, 8]}})

وچیي هی تاى اػیي ػولگغ ثغی کلیضی ثب اعػف بی هتع اؿتفبص وص ثغای هخبل:

> db.users.find({"user_id" : {"$in" : [12345, "joe"]})

www.ParsBook.org

Page 28: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

کت(ص ػجبعت ػیغ ثغاثغض {ticket_no : {$in : [725]}}== {ticket_no : 725}

هی ثبكض nin$ػولگغ in$مط ی همبثل ػولگغ

> db.raffle.find({"ticket_no" : {"$nin" : [3, 5, 8]}})

" اؿتor$صع كغط ب اؿتفبص اػ " orعا دل صم صع ثکبعگیغی

> db.raffle.find({"$or" : [{"ticket_no" : 3}, {"winner" : true}]})

یب > db.raffle.find({"$or" : [{"ticket_no" : {"$in" : [3, 5, 8]}}, {"winner" : true}]})

$not

ثغاثغ اػضاص id_numثغای هخبل فغى کیض ک هب یبػ ث کبعثغای صاعین ک صاعی

ثغاثغ اػضاص id_num... ـتض صع اثتضا ثبیض کبعثغای عا ک صاعای 2345789

... ـتض عا جضا کین ثمی کبعثغاى عا وبیق صین اػ آجبیی ک کبعثغاى جضا كض 161116

ـتض ثضیي ؿبى ػول هی وبیین mod[5,1]صاعای كبؿ ی

> db.users.find({"id_num" : {"$not" : {"$mod" : [5, 1]}}})

کبت(

كغط چضتبیی لبثلیت اجغا عی یک کلیض عا صاعض اهب ثغػعؿبی چضتبیی لبثلیت اجغا -1

ageثغی یک کلیض عا ضاعص ثغای هخبل صؿتع ػیغ بهؼتجغ اؿت ػیغا وؼهبى صثبع کلیض

عا تغییغ هی صض ک غیغلبثل لجل اؿت{"$inc" : {"age" : 1}, "$set" : {age : 40}}

ع بی سبم صع پغؽ ج ب

تب ایي جب ثب ع بی هتػی آكب كض این ک صع اؿبص ثکبع گغفت كض اض اهب ثؼضی اػیي

ع ب صع پغؽ جب عفتبع هتوبیؼی صاعض ک ثب آب آكب هی كین

Null

www.ParsBook.org

Page 29: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

ثغای هخبل اگغ یک هجوػ ثب اؿبص ػیغ صاكت ثبكین ث ػاى یک ثیت بآكب ػول هی کض

آگب{ "_id" : ObjectId("4ba0f0dfd22aa494fd523621"), "y" : null } { "_id" : ObjectId("4ba0f0dfd22aa494fd523622"), "y" : 1 } { "_id" : ObjectId("4ba0f148d22aa494fd523623"), "y" : 2 }

جاة پغؽ جی ػیغ

> db.c.find({"y" : null}) { "_id" : ObjectId("4ba0f0dfd22aa494fd523621"), "y" : null }

اؿت nullثب اعػف yهمضاع ؿضی عا ثغهی گغصاض ک صاعای

null ػال ثغ ایک همبصیغnull عا ثغهی گغصاض همبصیغی ک جص ضاعض عا یؼ

وػ ی ثبال اجبم صین صاعین:ثغهیگغصاض اگغ پغؽ جی ػیغ عا عی هج> db.c.find({"z" : null}) { "_id" : ObjectId("4ba0f0dfd22aa494fd523621"), "y" : null } { "_id" : ObjectId("4ba0f0dfd22aa494fd523622"), "y" : 1 } { "_id" : ObjectId("4ba0f148d22aa494fd523623"), "y" : 2 }

اؿت وچیي جص صاعص اػ nullدبل اگغ ثشاین کلیضع عا جـتج کین ک صاعای همضاع

" اؿتفبص هی کینexsist$ػولگغ "

> db.c.find({"z" : {"$in" : [null], "$exists" : true}})

ػجبعات هظن

mongoDB اػ کتبثشب یPerl Compatible Regular Expression (PCRE)

اؿتفبص هی کضثغای ثغعؿی ػجبعات هظن

یؼ هجبػ اؿت mongoDBهجبػ اؿت صع PCREثبثغایي غ ؿیتکـی ک صع

هب هی تاین ػجبعات هظن سص عا صع پؿت ی جبا اؿکغیپت اثتضا اهتذبى کین ؿپؾ صع

عص صعؿتی پغؽ جبی سص اػ آب اؿتفبص کین ک ایي کبع ث هب اطویبى سبطغ عا صعه

ػجبعاتوبى هی صض

ـتض عا پیضا کین Joeیب joeثغای هخبل هب هی ساین و ی کبعثغای عا ک صاعای اؿن

صع ایي دبلت هی تاین اػ یک ػجبعت هظن اؿتفبص کین ک ث کچکی یب ثؼعگی دغف

دـبؽ یـت هبض هخبل ػیغ

> db.users.find({"name" : /joe/i})

دبل اگغ ثشاین فمظ بم صع ػجبعات هظن هجبػ اؿت لی یبػ یـت iاؿتفبص اػ فلگ

ـتض عا پیضا کین کبفی ؿت ػجبعت هظن عا ث هعت كکل joeyکبعثغای عا ک هلبث

ػیغ توذیخ کین> db.users.find({"name" : /joey?/i})

www.ParsBook.org

Page 30: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

آى عا اعص اثتضا همبیـ کین ثضیي هعت کوچیي هی تاین ػجبعت هظن عا ثب سصف

پبیگب صاص هی کین

> db.foo.insert({"bar" : /baz/}) > db.foo.find({"bar" : /baz/}) { "_id" : ObjectId("4b23c3ca7525f35f94b60a2d"), "bar" : /baz/ }

آعای ب

ثضیي هعت ک ػبهغ صعى پغؽ ج ثغ عی آعای ای اػ ػبهغ ثـیبع آؿبى هی ثبكض

آعای ثطعی عفتبع هی کض ک غ کضام اعػكی اػ یک کلیض کلی ـتض> db.food.insert({"fruit" : ["apple", "banana", "peach"]})

ـت apple,banana,peachكبهل آعای ای اػ هی بی fruitصع ایي جب کلیض

> db.food.find({"fruit" : "banana"})

تیج ی پغؽ جی ثبال ثغگلت ؿض ثبال اؿت

ػیغ یـت صلت صاكت ثبكین ک ؿض ثبال ثغاثغ ثب ؿض غیغلبی

{"fruit" : "apple‖,"fruit" : "banana", "fruit" : "peach"}

www.ParsBook.org

Page 31: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

$all all$اگغ ثشاین آعای بیی ثب ػبهغ ثیق اػ یک ػضص عا ثب ن همبیـ کین اػ ػولگغ

اؿتفبص هی وبیین

فغى کیض هجوػ ی ػیغ عا صاعین> db.food.insert({"_id" : 1, "fruit" : ["apple", "banana", "peach"]}) > db.food.insert({"_id" : 2, "fruit" : ["apple", "kumquat", "orange"]}) > db.food.insert({"_id" : 3, "fruit" : ["cherry", "banana", "apple"]})

ـتض apple bananaهب ث صجبل اؿبصی ـتین ک صاعای ص ػوغ > db.food.find({fruit : {$all : ["apple", "banana"]}}) {"_id" : 1, "fruit" : ["apple", "banana", "peach"]} {"_id" : 3, "fruit" : ["cherry", "banana", "apple"]}

آهض bananaلجل اػ apple كص تغتیت هن یـت صع ؿض الوبطع ک هلبض هی

آهض اؿت bananaاؿت لی صع ؿض صم ثؼض اػ

تج!!!{fruit : {$all : ['apple']} =={fruit : 'apple'}.

ص ؿض ثبال ثب ن ثغاثغض همضاع ثغاثغی عا ثغهی گغصاض

ثبیض صلت صاكت ثبكین ک صع پغی جبیوبى تؼضاص ػبهغ آعای عا ثضعؿتی اعص کین اػ

کن ػیبص اعص کغصى پغیؼ کین

> db.food.find({"fruit" : ["apple", "banana", "peach"]})

> db.food.find({"fruit" : ["apple", "banana"]})

> db.food.find({"fruit" : ["banana", "apple", "peach"]})

www.ParsBook.org

Page 32: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

اگغ لغاع ثبكض ثغای یک ػوغ سبهی اػ آعای پغؽ ج ثیـین اػ ایضکؾ اؿتفبص هی

key.index وبیین ثغای هخبل اگغ ثضجبل ػوغ ؿم اػ آعای ـتین هی یـین> db.food.find({"fruit.2" : "peach"})

$size صع اؿتفبص اػ آعای ب كغط ثغی اضاػ ی یک آعای اؿت یک كغط کبعثغصی

> db.food.find({"fruit" : {"$size" : 3}})

تغکیت کین اهب هی تاین ثب "gt$"ب هبض condition$عا ثب صیگغ size$وی تاین

ایي کوجص عا ججغاى کینث آعای sizeاضبف کغصى یک کلیض

دض اضبف هی كصایک sizeغگب ک هب یک ػوغ ث آعای اضبف هی کین ث کلیض

> db.food.update({"$push" : {"fruit" : "strawberry"}, "$inc" : {"size" : 1}})

دبل هی تاین پغؽ جی ػیغ عا اجغا کین

> db.food.find({"size" : {"$gt" : 3}})

$slice operator ال عا ثغگغصاین commentتب 10هی ساین blog.postفغى کیض ک صع هجوػ ی

اؿتفبص هی وبیین slice$ثغای ایي کبع اػ ػولگغ

> db.blog.posts.findOne(criteria, {"comments" : {"$slice" : 10}})

ػوغ آسغ عا ثغگغصاین صاعین: 10ث ویي تغتیت اگغ ثشاین

> db.blog.posts.findOne(criteria, {"comments" : {"$slice" : -10}})

ثغای ثغگغصاضى ػبهغ هیبی یبػ ث یک آفـت)مط ی كغع( تؼضاص ػبهغ ثغگلتی

صاعین

> db.blog.posts.findOne(criteria, {"comments" : {"$slice" : [23, 10]}})

www.ParsBook.org

Page 33: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

عا ثغهی گغصاض 34تب 24هی گیغص اػ ػوغ ػوغ ال عا بصیض 23ایي صؿتع

کت ی هن صع هعص ایي ػولگغ ایي اؿت ک ثمی ی کلیضب یؼ ثغگغصاض هی كض

ی ػیغ اؿت عا ایجبص کغص اینک دبی کلیضب postsثغای هخبل هب یک ؿض ثب بم

ثب اجغای پغؽ جی تیج ی ػیغ ثغگلت صاص كض اؿت

صع سغجی وبیق صاص كضض .یؼ وبطع ک صیضین ثمی ی کلیضب

www.ParsBook.org

Page 34: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

Embedded documentsپغؽ ج ب صع

ب ص عف کلی جص صاعص embedded documentثغای طغح پغؽ ج اػ

پغؽ ج ثغی کل ؿض یب پغؽ ج ثغی یک کلیض هفغص

هبض هتبل ػیغ embeddedثغای هخبل پغؽ ج ثغی یک ؿض { "name" : { "first" : "masume", "last" : "ebhami" }, "age" : 22 }

هی تاض ثوعت ػیغ ثبكض > db.people.find({"name" : {"first" : "masume", "last" : "ebhami"}})

عا یؼ ث ؿض سص اضبف کض صیگغ middle name ثشاض کلیض masumeدبل اگغ

یت کلیضب یؼ دـبؿیت وچیي ایي ع پغؽ ج ث تغت صؿتع ثبال جاة شاض صاص

ثبثغایي تغتیت ػیغ ثغای ثغگغصاضى ؿض ثبال تغتیت صعؿتی یـت لبى هی صض

{"last" : "Schmoe", "first" : "Joe"}

عا دل؟

هعص ظغ هی تاین هلکالت پغؽ جی لجلی عا دل کینثب اؿتفبص اػ کلیض اعػف

ث هخبل ػیغ صلت کیض> db.people.find({"name.first" : "masume", "name.last" : "ebhami"})

دبل هجوػ ی ػیغ عا صع ظغ ثگیغیض{ "content" : "...", "comments" : [

} "author" : "joe", "score" : 3, "comment" : "nice post" }, { "author" : "mary", "score" : 6, "comment" : "terrible post"

} ] {

www.ParsBook.org

Page 35: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

کلیض وی تاى پغؽ جی ػیغ عا صاكت ثبكین ػیغا و ی کلیض ب همبیـ لض اض

comments صعپغ ؿ جی ػیغ match لض اؿت

db.blog.find({"comments" : {"author" : "joe", "score" : }"$gte" : 5}}})

ؿضی عا ک ػصتغ وی تاین پغؽ جی ػیغ عا صاكت ثبكین ػیغا ایي پغؽ ج وچیي

همضاع وبیق صاص كض عا ثغهی گغصاض

Joe عا اػ ؿض صم ثغ هی گغصاض 6 عا اػ ؿض ال همضاع

db.blog.find({"comments.author" : "joe", "comments.score" : {"$gte" : 5}})

جی صعؿت صع ػیغ وبیق صاص كض اؿت پغؽ

> db.blog.find({"comments" : {"$elemMatch" : {"author" : "joe","score" : {"$gte" : 5}}}})

ایي اهکبى عا هی صض ک هذتیبت صعى ؿض سص عا elemMatch$ اؿتفبص اػ ػولگغ

صع دبل embedded documentگغ ثضی کین ثغای ػهبی ک چضیي کلیض صعى

همبیـ اؿت اؿتفبص هی كص

$where .برای مثال اگر ما بیشترین کاربرد از این عملگر برای مقایسه ی دو کلید در یک سند است

یک لیست از آیتم هارا داشته باشیم و بخواهیم اسنادی که دارای مقدار مساوی هستند را پیدا کنیم طبق مثال زیر عمل می نماییم

> db.foo.insert({"apple" : 1, "banana" : 6, "peach" : 3}) > db.foo.insert({"apple" : 8, "spinach" : 4, "watermelon" : 4})

دارای watermelonوspinach حال در سند باال می خواهیم سندی را که در آن تفاده می کنیم که اس where$.برای این کار از دستور مقدار مساوی هستند را برگردانیم

است java scriptشامل متدهای > db.foo.find({"$where" : function () { ... for (var current in this) { ... for (var other in this) { ... if (current != other && this[current] == this[other]) { ... return true; ... } ... } ... } ... return false;

www.ParsBook.org

Page 36: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

... }});

برگردانده شود قسمتی از مجموعه جواب در سند وجود دارد و اگر مقدار trueاگر مقدار false برگردانده شود سند دارا ی کلیدهای مساوی نبوده است

همانطور که دیدیم ما از یک تابه استفاده کردیم که می توانیم بجای آن از یک رشته پرس نماییم وجو استفاده

ترتیب دو پرس وجوی زیر یکسان خواهند بودبدین > db.foo.find({"$where" : "this.x + this.y == 10"}) > db.foo.find({"$where" : "function() { return this.x + this.y == 10; }"})

www.ParsBook.org

Page 37: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

فول پجن

Sharding

www.ParsBook.org

Page 38: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

Sharding

Sharding اكبع صاعص ث پغصاػف اػ طغیك چضثشق کغصى اطالػبت طسیغ کغصى غ

ایي هفم یؼ ثغای تهیف ثشق صع یک هبكیي جضاگب.صع ثؼضی هالغ اػ پبعتیلي ثضی

اؿتفبص هی كص.

ثب ثشق ثشق کغصى اطالػبت هضیغیت طسیغ ؿبػی اطالػبت ثؼعگ ثضى یبػ ث هبكیي

اهکبى پظیغ اؿت.بی ثؼعگ لضعتوض

Shard کغصى ثوعت صؿتی تمغیجب صع ثیلتغ صیتبثیؾ ب اجبم هی گیغص.ػهبی ک یک

application دبی چضیي اتوبل ث ؿغعبی پبیگب صاص ای جضاگب اؿت ک غ کضام ث

طع کبهل هـتمل اػ ن ـتض صع ایي دبلت ث هضیغیت پیچیض ثغای طیغ ؿبػی صاص بی

گبگى ثغی ؿغعبی هتفبت وچیي طغح پغؽ جب ثغی ؿغع هبؿت ثغای

یي كی اجغایی اؿت اهب صعصؿغ ػیبص صاعص.ثغگغصاضى جاة یبػ صاعین الجت ا

mongoDB اػ هؼیتshard ک ثـیبعی اػ کغصى ثوعت اتهبتیک ثغ صاع اؿت

کغصى عا اػ ثیي ثغص اؿت shardصعصؿغبی

AutoSharding ث ایي هؼی اؿت ک هجوػ ب ث تک بی کچکتغ ثبم mongoصع shardingهفم

chunks تمـین هی كض

هـؤل یک ػیغ ثشلی shardب پشق هی كض ک غ shardب صع ؿغاؿغ chunkایي

بم صاعص mongosثبثغایي ثب اؿتفبص اػ یک پغصاػف هـیغیبثی ک اػ کل صیتبب اؿت

اجبم هی گیغص shardingػولیبت

هل ث آى applicationهـیغیبة هکبى و ی صاص ب عا هی صاض ثبثغایي ػهبی یک

ث یک صیتبثیؾ هؼولی بیق عا هبض صعساؿت بی هی كص هی تاض صعساؿت

mongoDB ثضض

www.ParsBook.org

Page 39: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

اؿتفبص لض اؿت shardingثب تج ث ص كکل ػیغ صع هیبثین ک صع كکل ال اػ

ػول mongosکبعثغ ث طع هـتمین ث صیتبثیؾ هل اؿت اهب صع كکل صم ثب اؿتفبص اػ

sharding اجبم گغفت اؿت ک ؿیـتن صع کل طعی عفتبع هی کض ک كجی ثضى sharding کبعثغ ثب پبیگب صاص تؼبهل صاعص

www.ParsBook.org

Page 40: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

کغصى اؿتفبص هی کین؟ shardکی اػ

ػهبی ک فضبی صیـک ثغی هبكیي فؼلی کن ثیبص-1

ػهبی ک یبػ ث كتي ؿغی صاص ب صاعین-2

هی ساین یک لـوت ثؼعگی اػ صاص بعا صع دبفظ گضاعی کینػهبی ک -3

shardingعا کین ثؼضا صع هعت یبػ اػ shadingصع دمیمت هب هی تاین اثتضا

اؿتفبص کین

Shard کغصى

کغصى اثتضا یک کلیض اػ هجوػ اتشبة هی کین ک ثغدـت آى کلیض صاص ب عا shardثغای

بم صاعص shad keyجضا هی کین ایي کلیض

ثب یک هخبل ثیلتغ ث ایي هضع هی پغصاػین:

عا گضاعی هی کض اكشبم فغى کیض ک یک هجوػ دبی اؿبص صاعین ک اطالػبت

هی ت shardصع ایي هعت یک م اكشبم ثبكضهب ثغ اؿبؽ ب shard keyاگغ

G-Pاؿبهی ع ک ثب shardكغع هیل عئ گضاعی ک یک A-Fاؿبهی ع ک ثب

shard آسغی كبهل اؿبهی ک ثب Q-Z كغع هیل ع گضاعی ثک

بع گضاعی هی کض هب هی ساین ک آى عا logفغى کیض ک یک هجوػ صاعین ک

shard کین اگغ هب ػولshardign عا اجغا کین ثmongoDB ثگیین ک اػ

timestamp ث ػاىshard key اؿتفبص کض صعاى دبل هب فمظ یکshard عی و

ادض هی عض shardی صاص بیوبى صاعین ثب اعص کغصى صاص ب و ی آب ث یک

ک صع ایي دبلت هجوػ ث ص لـوت تمـین ساض كض صیگغ اضبف کین shardچبچ یک

chunks بم صاعص ک یکchunk دبی اؿبصی اؿت ک صع عج اعػفshard key

june تب -∞ثیي timestampدبی اؿبص صع عج chunkهخال صع یک ـتض + اؿت∞تب june 27 2010دبی اؿبص chunk یک 2010 26

Sharding چ تبحیغی عی ػولیبت صاعص؟

كض یک shardوی تاین تفبتی ثیي یک هجوػ ی end userث ػاى یک

لض ثجیین shardهجوػ ی

ک ؿ تب كض اؿت shardفغى کیض ک وى هجوػ اكشبم عا صاعین ک ثغدـت اؿن

shard صع عجA تبZ ک صع ایوعت پغؽ جبی هتفبت ث عف بی صاعین

هتفبت اجغا ساض كض

db.people.find({"name" : "Susan"})

mongos ع هـتمین ث طایي پغؽ ج عا ثshard دبی اؿبهی كغع كض ثبQ-Z ساض فغؿتبص جاة عا ث کبعثغ ثغ هی گغصاض

db.people.find({"name" : {"$lt" : "L"}})

هغاجؼ هی كص A-F G-Pبی shardصع ایوعت ث db.people.find().sort({"email" : 1})

www.ParsBook.org

Page 41: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

mongos پغؽ ج عا ث و یshard ب هی فغؿتض ؿپؾ تبیج عا ثب ن هغتت

ؿبػی اصغبهی هی کض ث ػاى یک تیج ی ادض ثغ هی گغصاض

db.people.find({"email" : "[email protected]"})

ب فغؿتبص هی chunkصع ایوعت ایي پغؽ ج ث هعت پلت ؿغ ن ث و ی

كص تب تیج ثغگغصاض كص

shrdingػولیبت

جص صاعص shardص هغدل ثغای ػویبت

Sharding صع اؿبؽ كبهل ؿ جؼء اؿت صع اعتجبط ثب ن ػول هی کض

Shard

وچیي ػیغهجوػ بیی اػ صاص بی یک هجوػ عا گضاعی هی کضیک هذفظ ای ک

چضیي ؿغع shardاگغ ن صع یک اؿتیب یک هجوػ ی الوخی mongodیک ؿغع

جص صاكت ثبكض ثبػ یک ؿغع اهلی اؿت ؿغعبی صیگغ یؼ كبهل وبى صاص ب

ـتض

Mongos جص صاعص ک صع اهل mongoیک پغصاػف هـیغیبثی اؿت ک صع و ی تػیغ بی

یک صعساؿت هـیغیبثی جاة بی جوؼی اؿت

Config server یچ mongosاؿت.چى shrd.کضام صاص صع کضام پیکغثضی کالؿتغب عا طسیغ هی کض

ب عا shard پیکغثضی ث هکبی یبػ صاعین ک عا ثطع ویلگی طسیغ وی کضچیؼی

گضاعی کض

هیکین Configعا اجبم ثضین صع اثتضا ؿغع عا mongosصع اثتضا ثبیض پیکغثضی ؿغع

ث آى یبػ صاعین mongosػیغا ثغای

كغع هی کین mongodؿغع لجل اػ و ی ػولیبت اػ لجیل Configثغای $ mkdir -p ~/dbs/config $ ./mongod --dbpath ~/dbs/config --port 20000

200کیل ثبیت صع غ 1ک اى پیکغثضی ث فضب یب هبثغ ػیبصی یبػ ضاعص)فضبیی دضص

هگب ثبیت اػ اطالػبت الؼی(

ک ایي یبػ صاعین ک ػولیبت هـیغیبثی صع اتوبالت عا اجبم صض mongosدبل ث

کجبؿت Config serverػولیبت هـیغیبثی یبػ صعاص ک ثضاض $ ./mongos --port 30000 --configdb localhost:20000

www.ParsBook.org

Page 42: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

shardاضبف کغصى یک

اؿت mongodیک و اػ shardصع دمیمت $ mkdir -p ~/dbs/shard1 $ ./mongod --dbpath ~/dbs/shard1 --port 10000

سص عا ث کالؿتغهبى اضبف کین shardهتول كض این هی تاین mongosدبل هب ث

هتول كض این: mongosثغای اطویبى اػیک ث $ ./mongo localhost:30000/admin MongoDB shell version: 1.6.0 url: localhost:30000/admin connecting to localhost:30000/admin type "help" for help

صاعین : shardثغای اضبف کغصى

> db.runCommand({addshard : "localhost:10000", allowLocal : true}) { "added" : "localhost:10000", "ok" : true }

localhostهب عی shardایي ضغعت عا صاعص ک ثیبى هی کض فمظ allowLocalکلیض

اؿتSharding Data

کین id shard_ ثغ دـت کلیض fooعا صع صیتبثیؾ barفغى کیض ک هی ساین هجوػ ی

فؼبل هی کین fooعا ثغای صیتبثیؾ shardingصعاثتضا > db.runCommand({"enablesharding" : "foo"})

Shard کغصى صیتبثیؾ هجوػ ب عا صعshard بی هشتلف طسیغ هی کض ک ثغای

shard .کغصى یک هجوػ ایي ػول پیلیبػ اؿت

shardcollectionث یکجبع هی تاین اػ اثتضا یک هجوػ عا ثؿیل ی صؿتع

کین shardهجوػ عا > db.runCommand({"shardcollection" : "foo.bar", "key" : {"_id" : 1}})

.دبل اگغ صاص اضبف کین ثوعت کغص این id shard_دبل هب هجوػ عا ثغدـت

بی هغثط لغاع هی گیغص shardصع id_سصکبع صاص ب ثب تج ث

www.ParsBook.org

Page 43: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

فول كلنAggregation

www.ParsBook.org

Page 44: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

mongoDB اثؼاعبی ػیبصی عا ثغایaggregation فغان ؿبست اؿت اػ كوبعف

mapreduceؿبص اؿبص صعى یک هجوػ گغفت تب آبلیؼ صاص بی پیچیض ثب اؿتفبص اػ

Count

ک تؼضاص اؿبص صعى یک هجوػ عا ثغهی گغصاض aggregationؿبص تغیي اثؼاع

> db.foo.count() 0 > db.foo.insert({"x" : 1}) > db.foo.count() 1

ػلی عغن ؿبیؼ یک هجوػ ػولیبت كوبعف ثب ؿغػت ػیبصی اجبم هی گیغص

ثضین تب تیج عا ثغگغصاض countوچیي هی تاین یک پغؽ ج ث

> db.foo.insert({"x" : 2}) > db.foo.count() 1 > db.foo.count({"x" : 1}) 1

Distinct ک ثبیض یک صاص كض عا ثغهی گغصاض ایي صؿتع و ی همضاع بی هتفبت ثغای کلیض

هبض هخبل ػیغ: هجوػ یک کلیض ث ػاى عصی ث ایي صؿتع صاص كص> db.runCommand({"distinct" : "people", "key" : "age"})

فغى کیض هجوػ ی ػیغ عا ثب اؿبص صاص كض صاعین{"name" : "Ada", "age" : 23} {"name" : "ashli", "age" : 30} {"name" : "john", "age" : 25} {"name" : "Andy", "age" : 30}

دبل تیج ی صؿتع ثبال ثغی ایي هجوػ ث لغاع ػیغ اؿت> db.runCommand({"distinct" : "people", "key" : "age"}) {"values" : [20, 35, 60], "ok" : 1}

Group

www.ParsBook.org

Page 45: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

groupكجی mongoصع groupآكبیی صاك ثبكیض ثبیض ثگین ک sqlاگغ ثب ػثبى بی by صعsql اؿت.

Group ایي اجبػ عا هی صض ک هجوػ ی سص عا ث ػیغگغبی جضاگب ثغدـت

همضاع کلیض اتشبثی تمـین ثضی کین

10ؿبػت ثغای هخبل فغى کیض ک هب ؿبیتی صاعین ک هجصی عا غ چض صلیم یکجبع اػ

ػوغ حجت هی کض واع آسغیي هجصی عا گضاعی هی کض 4هجخ تب

عػ لجل عا هلبض کین ثب گغ ثضی کبع 30هجصی صع آسغیي دبل اگغ ثشاین همضاع

هب آؿبى تغ هی كص {"day" : "2010/10/03", "time" : "10/3/2010 03:57:01 GMT-400", "price" : 4.23} {"day" : "2010/10/04", "time" : "10/4/2010 11:28:39 GMT-400", "price" : 4.27} {"day" : "2010/10/03", "time" : "10/3/2010 05:00:23 GMT-400", "price" : 4.10} {"day" : "2010/10/06", "time" : "10/6/2010 05:27:58 GMT-400", "price" : 4.30} {"day" : "2010/10/04", "time" : "10/4/2010 08:34:50 GMT-400", "price" : 4.01}

هبض ػیغ هب هی ساین لیـت آسغیي هجصی غ عػ عا هلبض کین[ {"time" : "10/3/2010 05:00:23 GMT-400", "price" : 4.10}, {"time" : "10/4/2010 11:28:39 GMT-400", "price" : 4.27}, {"time" : "10/6/2010 05:27:58 GMT-400", "price" : 4.30} ]

ثغای ایي کبع کبفی ؿت ک هجوػ ی سص عا ثغدـت عػ گغ ثضی کین صع غ گغ

آسغیي ؿض عا پیضا کین

> db.runCommand({"group" : { ... "ns" : "stocks", ... "key" : "day", ... "initial" : {"time" : 0}, ... "$reduce" : function(doc, prev) { ... if (doc.time > prev.time) { ... prev.price = doc.price; ... prev.time = doc.time; ... } ... }}})

دبل ث ثغعؿی ثشق بی ایي صؿتع هی پغصاػین

www.ParsBook.org

Page 46: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

"ns" : "stocks", هجوػ ی هعص ظغ ثغای گغ ثضی عا هلشن هی کض

―key‖:‖day‖ کلیضی ک لغاع اؿت ثغدـت آى گغ ثضی اجبم گیغص عا هلشن هی

ـتض صع یک گغ لغاع ساض گغفتکض.لطؼب صع ایي هخبل اؿبصع ک صاعای عػ یکـبى "initial" : {"time" : 0}

"$reduce" : function(doc, prev) { ... }

هجوػ یکجبع فغاسای هی كص ک ؿض جبعی عا هی گیغص ایي تبثغ ثغای غ ؿض صعى

یک اجبك ثغای اؿبص اؿت ک صع ایي هخبل هب تبعیز ؿض جبعی عا ثب تبعیز اجبك همبیـ هی

کین صع هعت آسغیي ؿض ثصى ػهبى هجصی عا صع اجبك طسیغ هی کین .تج

جضاگب ساین صاكتگغ یک اجبك صاكت ثبكیض ک ثغای غ

عػ گضكت ثبكض پؾ یبػ ث كغطی صاعین 30صع اثتضا گفتین ک هی ساین تبیج هغثط ث

ک ایي هلکل عا دل کض

> db.runCommand({"group" : { ... "ns" : "stocks", ... "key" : "day", ... "initial" : {"time" : 0}, ... "$reduce" : function(doc, prev) { ... if (doc.time > prev.time) { ... prev.price = doc.price; ... prev.time = doc.time; ... }}, ... "condition" : {"day" : {"$gt" : "2010/09/30"}} ... }})

غ گغ كبهل عػ عا هی آعص ک غ کضام یک گغ ـتض 30صؿتع ثبال آعای ای اػ

(day‖ : string―کلیضی اؿت ک ثغدـت آى گغ ثضی كض اؿت هخال صع ایي هخبل )

جبكض صع یک گغ ثب ػوغ dayبیی.اگغ ثؼضی اؿبص كبهل کلیض prevهمضاع

day:null ک ثغای دظف ایي گغ ب کبفی ؿت ک گغ ثضی هی كض"day" :

{"$exists" : true} صع لـوت كغط ثیـین عا

تؼضاص اؿبص اؿتفبص كض تؼضاص همضاعبی هتفبت ثغای کلیض عا ثغ هی groupک صؿتع

گغصاض> db.runCommand({"group" : {...}}) { "retval" :

www.ParsBook.org

Page 47: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

[ { "day" : "2010/10/04", "time" : "Mon Oct 04 2010 11:28:39 GMT-0400 (EST)" "price" : 4.27 }, ... ], "count" : 734, "keys" : 30, "ok" : 1 }

اؿتفبص Finalizerچبچ ثشاین تیج ثبػگلتی ثوعتی ک سصهبى هی ساین ثبكض اػ

هی وبیینFinalizer

Finalizer ثغای کن کغصى دجن اطالػبت سغجی اػ ؿوت صیتب ثیؾ ث ؿوت کبعثغ اؿتفبص

ایي یک یژگی سیلی هوی اؿت ػیغا ثغای سغجی گغ ثضی یبػ ث یک هی كض ک

لبلجی هبؿجی اػ جاة صیتبثیؾ صاعین

ثغای لبى صاصى ایي اهغ ثب یک هخبل كغع هی کین

صع ایي هخبل هب ثالگی صاعین ک صاعای پـت بیی ثب تگ بی هتفبت اؿت دبل هی ساین

لبض وبیین صع ایوعت یبػ صاعین ک گغ ثضی ثغ هذجة تغیي تگ صع غ عػ عا ه

دـت عػ صاكت ثبكین ک همضاع تگ ب عا گضاعی کض> db.posts.group({ ... "key" : {"tags" : true}, ... "initial" : {"tags" : {}}, ... "$reduce" : function(doc, prev) { ... for (i in doc.tags) { ... if (doc.tags[i] in prev.tags) { ... prev.tags[doc.tags[i]]++; ... } else { ... prev.tags[doc.tags[i]] = 1; ... } ... } ... }})

ک تیج ای كجی ػیغ عا ثغ هی گغصاض[ {"day" : "2010/01/12", "tags" : {"nosql" : 4, "winter" : 10, "sledding" : 2}},

www.ParsBook.org

Page 48: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

{"day" : "2010/01/13", "tags" : {"soda" : 5, "php" : 2}}, {"day" : "2010/01/14", "tags" : {"python" : 6, "winter" : 4, "nosql": 15}} ]

اهب فغؿتبصى و ی تگ ب ث یضا هی کیناع ثؼعگتغیي تگ عا صع ؿوت کبعثغ پؿپؾ هب همض

چبع چیـت؟ ؿغثبع ػیبصی اؿت ؿوت کبعثغ صاعای

لجل اػ فغؿتبص كضى ث ؿوت کبعثغ صعای تبثؼی اؿت ک عی غ گغ finalizerیک

ک صع ایي دبلت سغجی هب هغتت ثضى یچ اضبفبتی اؿت اجغا هی كص> db.runCommand({"group" : { ... "ns" : "posts", ... "key" : {"tags" : true}, ... "initial" : {"tags" : {}}, ... "$reduce" : function(doc, prev) { ... for (i in doc.tags) { ... if (doc.tags[i] in prev.tags) { ... prev.tags[doc.tags[i]]++; ... } else { ... prev.tags[doc.tags[i]] = 1; ... } ... }, ... "finalize" : function(prev) { ... var mostPopular = 0; ... for (i in prev.tags) { ... if (prev.tags[i] > mostPopular) { ... prev.tag = i; ... mostPopular = prev.tags[i]; ... } ... } ... delete prev.tags ... }}})

دبل فمظ تبیجی ثغگـت صاص هی كص ک هػص یبػ هب اؿت[ {"day" : "2010/01/12", "tag" : "winter"}, {"day" : "2010/01/13", "tag" : "soda"}, {"day" : "2010/01/14", "tag" : "nosql"} ]

اؿتفبص اػ تبثغ ث ػاى کلیض

www.ParsBook.org

Page 49: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

صع گغ ثضی هی تاین ثجبی ایک اػ یک کلیض ث ػاى هؼیبعی ثغای گغ ثضی اؿتفبص

کین اػ تبثغ بی صلشای ثغای گغ ثضی اؿتفبص کین صع ایي دبلت فمظ کبفی ؿت ثجبی

key کلو یkeyf عا ثیـین هبض صؿتع ػیغ

> db.posts.group({"ns" : "posts", ... "$keyf" : function(x) { return x.category.toLowerCase(); }, ... "initializer" : ... })

MapReduce countاؿت ک ثیلتغ اػ غ کبعی عا ک هی تاین ثب aggregationیکی اػ اثؼاعبی group distinct اجبم ثضین ثبmapreduce یؼ اجبم ثضین

هی كص ػولیبت هاػی ؿبػی ثغی چضیي هبكیي aggregationوچیي ثب ایي عف

یؼ اجبم ثگیغص

ک صع ایي هعت هـبل ث چض لـوت تمـین هی كص غ لـوت صع یک هبكیي جضاگب

هـبل دل هی كص پؾ اػ اتوبم کبع صع غ هبكیي جاة ب ثب ن اصغبم هی كض ث

ػاى یک جاة بیی ثبػگـت صاص هی كص

www.ParsBook.org

Page 50: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

فول فتنIndexing

www.ParsBook.org

Page 51: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

کؾ گظاعی ثی عی پغؽ جبیوبى صاكت ثبكین یبػ ث ضایک تؼییي کین چگ یک ای

اهب ثبػج افؼایق کبعایی هی كص ت ثبال صاعصعهب

ثغفغى هب یک پغؽ جی ؿبص ثغی یک کلیض صاعین

> db.people.find({"username" : "mark"})

ػهبی ک یک کلیض صع پغؽ ج اؿتفبص هی كص ثب ایضکؾ گضاعی ؿغػت پغؽ ج عا

ایجبص کین ثغای ایي usernameصع ایي هخبل هی ساین یک ایضکؾ ثغی .ثبال هی ثغین

اؿتفبص هی وبیین ensureIndexکبع اػ هتض > db.people.ensureIndex({"username" : 1})

یک ایضکؾ فمظ ثغای یکجبع عی غ هجوػ ایجبص هی كص.اگغ ثشاین وبى ایضکؾ عا

ثغای ثبع صیگغ ایجبص کین یچ اتفبلی وی افتض

ایضکؾ عی یک کلیض ثبػج هی كص ک پغؽ جب ثغی آى کلیض ؿغیؼتغ اجغا كص

کلیض ایضکؾ كض ثبكضدتی اگغ كبهل اهب پغؽ جبی صیگغ عا ؿغیغ وی کض

ثغای هخبل ثب ایضکؾ گظاعی جبعی ثغی پغؽ جی ػیغ تبحیغی عر وی صض> db.people.find({"date" : date1}).sort({"date" : 1, "username" : 1})

ثبیض ایضکؾ گظاعی یک لبى کلی ایي اؿت ک و ی کلیض بی اؿتفبص كض صع پغؽ ج

ایضکؾ گظاعی date username ثبیض صع پغؽ جی ثبال غص کلیضكض ثغای هخبل

كض

> db.ensureIndex({"date" : 1, "username" : 1})

اپغ ثیلتغ اػ یک کلیض صاكت ثبكین صع آوعت ثبیض اتشبة صعؿتی ثغای ایضکؾ گظاعی کین

ثغای هخبل هجوػ ی ػیغ عا صاعین { "_id" : ..., "username" : "smith", "age" : 48, "user_id" : 0 } { "_id" : ..., "username" : "smith", "age" : 30, "user_id" : 1 } { "_id" : ..., "username" : "john", "age" : 36, "user_id" : 2 } { "_id" : ..., "username" : "john", "age" : 18, "user_id" : 3 } { "_id" : ..., "username" : "joe", "age" : 36, "user_id" : 4 } { "_id" : ..., "username" : "john", "age" : 7, "user_id" : 5 } { "_id" : ..., "username" : "simon", "age" : 3, "user_id" : 6 } { "_id" : ..., "username" : "joe", "age" : 27, "user_id" : 7 } { "_id" : ..., "username" : "jacob", "age" : 17, "user_id" : 8 } { "_id" : ..., "username" : "sally", "age" : 52, "user_id" : 9 } { "_id" : ..., "username" : "simon", "age" : 59, "user_id" : 10 }

www.ParsBook.org

Page 52: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

ایضکؾ گظاعی کین ک .{username" : 1, "age" : -1"}دبل هی ساین ثغ دـت

یج ػیغ ثغگلت صاص هی كصتب

{ "_id" : ..., "username" : "jacob", "age" : 17, "user_id" : 8 }

{ "_id" : ..., "username" : "joe", "age" : 36, "user_id" : 4 } 66 | Chapter 5: Indexing { "_id" : ..., "username" : "joe", "age" : 27, "user_id" : 7 } { "_id" : ..., "username" : "john", "age" : 36, "user_id" : 2 } { "_id" : ..., "username" : "john", "age" : 18, "user_id" : 3 } { "_id" : ..., "username" : "john", "age" : 7, "user_id" : 5 } { "_id" : ..., "username" : "sally", "age" : 52, "user_id" : 9 } { "_id" : ..., "username" : "simon", "age" : 59, "user_id" : 10 } { "_id" : ..., "username" : "simon", "age" : 3, "user_id" : 6 } { "_id" : ..., "username" : "smith", "age" : 48, "user_id" : 0 } { "_id" : ..., "username" : "smith", "age" : 30, "user_id" : 1 }

صیض هی كص بم کبعثغی ثغدـت افؼایق دغف الفجب ث تغتیت لغاع هی گیغص وبطع ک

صع اؿن بی ثغاثغ ؿي ثغدـت کبق ؿي هغتت كض اض

وچیي ثبػج تـغیغ پغؽ جب عی age usernameایضکؾ گظاعی ثغی

username ث طع کلی اگغ ایضکؾ هب عی صاعصn کلیض ثبكض صع ایوعت پغؽ

هخال اگغ ایضکـی ثب کلیضبی جب ثغی غ یک اػ پیلضبی ایي کلیضب ؿغیغ اؿت

{"a" : 1, "b" : 1, "c" : 1, ..., "z" : 1} عا صاكت ثبكین غ کلیضی هبض کلیض بی ػیغ

لی ثغی {a" : 1, "b" : 1, "c" :1"} ,{a" : 1, "b" : 1"} ,{a" : 1"}ایضکؾ هی كض

{"b" : 1}, {"a" : 1, "c" :1}, کبعثغصی ضاعص ثبثغایي کلیض ثبیض پیلضبیی اػ ایضکؾ هب

ثبكض

www.ParsBook.org

Page 53: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

فول لتن

MongoDBهضیغیت صع

www.ParsBook.org

Page 54: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

mongoDBكغع کبع ثب اؿتفبص هی وبیین .وچیي mongodاػ صؿتع mongoDBثغای عكي کغصى ؿغع

صاعای گؼی بی هضیغیتی ػیبصی اؿت ک هی تاى آب عا ثب اؿتفبص اػ صؿتع

mongod –help هاعص هن صع ػیغ آهض اؿتهلبض کین.

--dbpath .هـیغ پیق فغى ثغای صاص فغػی ثغای صایغکتعی صاص ب استوبم هی صضیک هـیغ

یبػ ث صایغکتعی صاص ی سصف صاعص دبل اگغ هب ؿ mongodاؿت غ data/dbب/

mongod.ػهبی ک صاكت ثبكین یبػ ث ؿ صایغکتعی جضاگب صاعین mongodپغصاػف

صع صایغکتعی صاص ایجبص هی كص ک اػ mongod.lock اجغا هی كص یک فبیل ثبم

.دبل اگغ ؿؼی بی صیگغ صع صاسل صایغکتعی جبعی جلگیغی هی کض mongodپغصاػف

صیگغ عا صع وبى صایغکتعی صاص اجغا کین ثب سطبی ػیغ هاج هی mongodصاكت ثبكین

كین"Unable to acquire lock for lockfilepath: /data/db/mongod.lock."

--port هی صض ث طع پیق فغى هب استوبم mongodیک كوبع پعت ث ؿغع

ک اؿتفبص اػ آى تؿظ پغصاػف بی صیگغ ثؼیض هی ثبكض mongodثغای 27017پعت

اگغ عا اجغا کین یبػ ث پعت بی هتفبت صاعین mongod.اگغ ثشاین چضیي اؿت

عا عی یک پعت ک صع دبل اؿتفبص اؿت اجغا کین ثب سطبی ػیغ mongodثشاین

هاج هی كین"Address already in use for socket: 0.0.0.0:27017"

--fork

Fork کغصى ؿغع اجغایmongoDB عا ث هعت دیغت اگیؼی لضعتوض هی وبیض

--logpath تغ اػ سغجی سظ صؿتع اؿت هی و ی سغجی ب عا ث یک فبیل هشوهی ک ؿغیغ

بی logب عا گضاعی هی کض log.ک صع هعت جص فبیلی عا ایجبص هی کض ک فغؿتض

بی لضیوی تغ یؼ دفع كض log.صع هعتی ک ثشاین لضیوی تغ عا پبک هی وبیض

اؿتفبص هی کین logpath–صع کبع -- logappendاػ

--config

www.ParsBook.org

Page 55: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

تظیوبت ک كبهل گؼی بی اضبفی اؿت ک صع سظ فغهبى یبهض اؿت اؿتفبص اػ یک فبیل

هی کض

پیکغثضی ثغ پبی ی فبیل

mongoDB اػ پیکغثضی اطالػت اػ عی یک فبیل پلتیجبی هی کض

اؿتفبص هی کین config–یب f– ثغای گغفتي گؼی بی پیکغثضی اػ یک فبیل اػ صؿتع

یک فبیل پیکغثضی پلتیجبی هی كض صلیمب گؼی بی هعص پظیغف صع گؼی بیی ک صع

سظ فغهبى اؿت

ایي یک هخبل اػ یک فبیل پلتیجبی اؿت# Start MongoDB as a daemon on port 5586 port = 5586 fork = true # daemonize it! logpath = mongodb.log

ک ثغاثغ ثب وبى تظیوبتی اؿت ک صع سظ فغهبى اجبم هی صین

وپیي جج بی جبلجی صع هعص ایي فبیل ب جص صاعص :

غ هتی ک ثب # كغع كص یک تضیخ اؿت یک صؿتع -1 اؿت option=valueهلشن کغصى گؼی ب كجی ؿیتکؾ ثغای -2 لغاع صین trueؿت ک همضاع عا ثغاثغ ایي ا fork–گؼی بی كجی ثغای -3

mongoDBهتلف کغصى جص صاعص ک ػبم تغیي عا دل mongoDBگؼی بی ػیبصی ثغای هتلف کغصى

عا ctrl,cاؿت ک ػهبی ک ؿغع صع تغهیبل صع دبل اجغاؿت ن ػهبى کلیض تغکیجی

اؿت killثفلبعین تب ؿغع تلف کض.عا دل صیگغ اؿتفبص اػ صؿتع

صؿتع صیگغ ثغای سبهف کغصى ؿغع ایي اؿت ک ث ػاى اصهیي اعص صیتبثیؾ

admin ثلین صؿتع ػیغ عا اجغا وبیین

{―shutdownServer()‖:1}

www.ParsBook.org

Page 56: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

monitoringظبعت یب

ظبعت ثغی کبعایی ؿبلن ثصى ؿغع ثغای غ هضیغ ؿیـتوی اویت صاعص .

صاعای ػبهل بیی اؿت ک ایي کبع عا آؿبى کغص اؿت mongoDBسكجشتب

اؿتفبص اػ هفذ ی هضیغیت

ث ثبالی پعت 1000عی پعت httpایي اؿظ ث طع پیق فغى ثغی ؿغع

هب لغاع صاعص ک ایي هفذ صاعای اطالػبت الی اػ ؿغع هب mongoهذلی صعایع

اؿت

كي کین صع هغعگغ سص ثیـین ثغای صیضى ایي هفذ کبفی ؿت ؿغع عا ع

http://localhost:28017

اؿتفبص کین صع كوبع پعت ػضص پعت صعایع هذلی port–چبچ اػ گؼی ی

عا هی یـین 1000+وبطع ک صع كکل ػیغ هلبض هی كص اهکببتی اػ لجیل تبییض جـتج ایضکؾ

اطالػبتی صع هعص ؿغع جص صاعص replicationگظاعی

ثغای ایک ثتاین اؿتفبص کبهلی اػیي هفذ صاكت ثبكین یبػ ث عكي کغصى پلتیجبى

REST اؿت ک ثب صؿتع–rest یغصایي کبع اجبم هی گ

عا عكي هی mongodچبچ ثشاین هفذ ی اصهیي عا سبهف ثبكض ن ػهبى ک

nohttpinterface– کین هی یـین

کت(

پعتبی mongoDBث صعایع بی httpیچ گب تالف کیض ک اػ طغیك

mongoDBصعایعب هتول ثلیض.ػیغا پعتبی صعایع تب ثب پغتکل ؿیوی هذلی

httpتغل هی كص ثب صعساؿت بی ک

www.ParsBook.org

Page 57: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

هغعگغ سص ثیـین ثب كت ی ػیغ عا صع http://localhost:27017صؿتع اگغ

هاج هی كین

You are trying to access MongoDB on the native driver port. For http diagnostic access, add 1000 to the port number

www.ParsBook.org

Page 58: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

www.ParsBook.org

Page 59: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

ضؼیت بی ؿغع

اثؼاع بی آهبعگیغی ػیبصی ثغای ضؼیت گیغی صع هعص ؿغع جص صاعص ثب كتي

صع سظ فغهبى تبیج ػیغ عا وبیق هی صض serverStatusصؿتع

هوکي اؿت کلیض ب ثب وضیگغ هتفبت mongoDB ـش ی platform)ثب تج ث

ثبكض(

www.ParsBook.org

Page 60: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

هلبض کین ک ثغای jsonوچیي هی تاین اطالػبت هغثط ث ضؼیت عا صع یک فبیل

هلبض ایي فبیل صع هغعگغ سص هی یـین

)http://localhost:28017/_status(

ث ثغعؿی چض کلیض هن هی پغصاػین

"globalLock"

"mem"

"indexCounters"

"misses"

"hits"

"background Flushing"

"opcounters"

"asserts"

Mongostat

سیلی لضعتوض اؿت ام صاعای هکبیـن کبعثغپـضی ثغای کبعبی ظبعتی serverStatus اگغچ

ضاعص

وغا کغص اض ک mongoDBثب mongostatیک mongoDB سكجشتب ی تػیغ بی

یک هفذ ی کبعثغ پـض ثغای سغجی ضؼیت ؿغع صاعص

Mongostat اطالػبت هوی اػ ضؼیت ؿغع عا صع سغجی چبپ هی کض ک صع حبی

اػ real-timeضؼیت ؿغع عا صع یک سظ جضیض ث هب هی صض ک ثبػج هی كص هب یک صیض

ضؼیت ؿغع صاكت ثبكین

,inserts/s چبپ هی كص صاعای ػبیی هلبث mongostatغ ؿتی ک صع commands/s, vsize, % locked اؿت ک صلیمب ثغاثغ ثب صاص بی هجص صع

serverStatus اؿت Third-Party Plug-Ins

www.ParsBook.org

Page 61: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

Security صاكت ثبكض.الیت ال ثغای غ هضیغ ؿیـتن ایي اؿت ک اػ اهیت ؿیـتن سص اطویبى کبفی عا

صع هذیطی اهي mongoDBایي اؿت ک mongoDBثتغیي عا دل ثغای کتغل اهیت ثب

ثغی هبكیي بی اهی ک تابیی اتوبل ثب ؿغع عا صاعض اجغا ثلص

authentication اهل

ایي اهکبى عا صاعص ک كبهل کبعثغاى هتؼضصی ثبكض mongoDBغ صیتبثیؾ صع

كض اجبػ ی اػوبل authenticateؿیـتن عا فؼبل هی وبیین تب کبعثغاى ػهبی ک اهیت

ساضى كتي ثغی صیتبثیؾ ب عا صاعض

اػ یک پبیگب صاص ی استوبهی authenticationصع ثذج mongoDBالػم ث طکغ اؿت ک

ک کبعثغ اصهیي ث ػاى یک ؿپغ کبعثغ صع ظغ گغفت هی كص اؿتفبص هی کض adminثبم

کبعثغ اصهیي هی تاض غ کبعی ثغی صیتبثیؾ بی هجص اجبم صض authenticationثؼض اػ

اؿت shutdown show dbsوچیي لبصع ث اجبم صؿتعاتی كجی

یک کبعثغ اصهیي ث ؿیـتن سص اضبف اثتضا الػم اؿت ک فؼبل کغصى اهیت لجل اػ كغع ثذج

کین> use admin switched to db admin > db.addUser("root", "abcd"); { "user" : "root", "readOnly" : false, "pwd" : "1a0f1c3c3aa1d592f490a2addc559383" } > use test switched to db test > db.addUser("test_user", "efgh"); { "user" : "test_user", "readOnly" : false, "pwd" : "6076b96fc3fe6002c810268702646eec" } > db.addUser("read_only", "ijkl", true); { "user" : "read_only", "readOnly" : true, "pwd" : "f497e180c9dc0655292fee5893c162f1" }

صاعین testوبگع ک هلبض هی کیض یک کبعثغ اصهیي ص کبعثغ صع صیتبثیؾ

www.ParsBook.org

Page 62: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

اؿت فمظ اجبػ ی ساضى اػ صیتبثیؾ عا صاعص ک ایي کبع ثب read_onlyک یک کبعثغ

true کغصى همضاع آعگهبى ؿم هتض اجبم پظیغفت اؿت کبعثغ صیگغ ن اجبػ ی كتي

صاعص ن اجبػ ی ساضى عا

ؿطخ صؿتغؿی کبعثغ عا ن تؼییي کغص ک addUserوچیي هی تاى ثب فغاسای هتض

ي کبع اثتضا ثبیض اهیت فؼبل ثبكضثغای ای

تب ثغای اضبف کغصى کبعثغ جضیض یـت ثلک هی تاى ثب آى عهؼ addUserکت(تبث

ثصى عا یؼ تغییغ صاص. ایي کبع ثضیي هعت اؿت ک کبفی ؿت هتض read_onlyضؼیت

عا ثب بم کبعثغی عهؼ جضیض یب ضؼیت جضیض فغاسای کین

فؼبل کغصى اهیت

عا صع سظ فغهبى auth– جغای فؼبل کغصى اهیت صؿتعهی کیو restartاثتضا ؿغع عا

هی یـین> use test switched to db test > db.test.find(); error: { "$err" : "unauthorized for db [test] lock type: -1 " } > db.auth("read_only", "ijkl"); 1 > db.test.find(); { "_id" : ObjectId("4bb007f53e8424663ea6848a"), "x" : 1 } > db.test.insert({"x" : 2}); unauthorized > db.auth("test_user", "efgh"); 1 > db.test.insert({"x": 2}); > db.test.find(); { "_id" : ObjectId("4bb007f53e8424663ea6848a"), "x" : 1 } { "_id" : ObjectId("4bb0088cbe17157d7b9cac07"), "x" : 2 } > show dbs assert: assert failed : listDatabases failed:{ "assertion" : "unauthorized for db [admin] lock type: 1 ", "errmsg" : "db assertion failure", "ok" : 0 } > use admin switched to db admin > db.auth("root", "abcd"); 1

www.ParsBook.org

Page 63: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

> show dbs admin local test

ػهبی ک ثغای ثبع ال ث پبیگب صاص هتول هی كین اجبػ ی اجبم یچ گ ػولیبت

كتي عا ضاعینساضى

اجبػ ی اجبم کبعبی read_onlyكضى ث ػاى یک کبعثغ authenticateپؾ اػ

ؿبص هبض جـتج عا صاعین

ػهبی ک لوض عص صاص عا صاعین هجضصا ثب كکـت هاج هی كین ػیغا یک کبعثغ

read_only کبعثغ ـتین test_user تاض ک کبعثغی صاعای هجػ كتي اؿت هی

صاص بی جضیض عا ث صیتبثیؾ اعص کض

عا اجغا کض ک ایي صؿتع تب تؿظ کبعثغاى اصهیي اجغا show dbsاهب وی تاض صؿتع

هی كض

authentication ذ ی کبعکغصػهبی ک کبعثغاى ث صیتبثیؾ ب اضبف هی كض ایي کبعثغاى صع لبلت اؿبصی صع هجوػ

طسیغ هی كض ک ؿبستبع ایي اؿبص ث كکل ػیغ اؿت sysyem.usersی {"user" : username, "readOnly" : true, "pwd" : password hash}

بم کبعثغی عهؼ اؿتثغای hash یک password hashک

ثضیی اؿت ک ثغای دظف یک کبعثغ کبفی ؿت ک ؿض هعص ظغ عا صع هجوػ ی

system.users :پبک کین هبض ػیغ > db.auth("test_user", "efgh"); 1 > db.system.users.remove({"user" : "test_user"}); > db.auth("test_user", "efgh"); 0

ؿبیغ هالدضبت ثغای ثغلغاعی اهیت ؿیـتن

جص صاعص ک ثبیض ث آب mongoDBگؼی بی ػیبصی ثغای تؼییي ؿطخ صؿتغؿی صع

تج صاكت ثبكین

ثبیض صلت کین ک پغتکل ؿیوی اؿتفبص هی کین authenticationاػ ک ػهبی صع اثتضا

mongoDB ث هعت عهؼ كض یـت.ثغای ایي کبع ثبیض اػ کبثل بیSSH یب صیگغ

.اؿتفبص کین mongoDBثغای عهؼ کغصى اتمبالت ثیي کبعثغ ؿغع هکبیـن بی هلبث

پلت یک فبیغ ال یب یک كجک ی لبثل صؿتغؿی تب ثب ؿغع mongoDBویل ؿغع

ثغبه ی هب ثبكض.

www.ParsBook.org

Page 64: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

كوب ثغی یک هبكیی اؿت ک اػ ثیغى اجبػ صؿتغؿی صاعص صع ایي mongoDBاگغ

mongoDBهذلی ث كوب صاص هی كص ک ipیک bindip--دبلت ثب اؿتفبص اػ گؼی ی

ـت کبفی mongodكوب ثغی آى اؿت.ثغای هخبل ثغای هتول كضى اػ ؿغع ثغبه تى ث

اؿتفبص کین .mongod --bindip localhost صؿتع

ثغای غیغفؼبل کغصى اجغای جبا اؿکغیپت صع ؿوت ؿغع صع ػهبى كغع كضى صیتبثیؾ اػ

اؿتفبص هی کین noscripting–صؿتع

www.ParsBook.org

Page 65: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

پلتیجبى گیغی تؼویغ

mongoDB توبم صاص ب عا صع صیتب صایغکتعی طسیغ هی کض ک ػول پلتیجبى گیغی ث

آؿبی ثب کپی کغصى ایي فبیل ب اجبم هی گیغص

کپی ثگیغین .پؾ اثتضا mongoDBچى ایوی یـت ک اػیي فبیل ب صع ػهبى اجغای

کین ؿپؾ ػول کپی عا اجبم هی صین عا سبهف هی mongoDBؿغع

mongodump and mongorestore

استفاده از mongoDBیک روش برای عمل پشتیبان گیری در حین کار mongodump است

www.ParsBook.org

Page 66: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

فول نReplicaton

www.ParsBook.org

Page 67: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

داده روي چندین سرور قرار یك پایگاهها و جداول ، دادهReplicationبرداري یا در كپي

هاي پایگاه هاي داده فرعي با داده هاي مربوط به پایگاه گیرد و از طریق فرایندهایي، داده مي

افزاري استفاده كننده از این پایگاه شود. به این ترتیب سیستم نرم داده اصلي هماهنگ مي

ترین سرور داده، براي دسترسي به داده مورد نظر خود به جاي سرور اصلي، به نزدیك

شود و سرعت كند. در نتیجه از ترافیك شبكه كاسته مي محلي معرفي شده به آن مراجعه مي

( در Master/Slaveبرداري به روش پایه / پیرو ) یابد. كپي تهیه اطالعات نیز افزایش مي

داده عرضه و در نسخه بتاي این پایگاه 2000براي اولین بار در سال MySQLداده پایگاه

شد.

Replicationـت ی هغکؼی هضیغیت ؿیـتن بی پبیگب صاص صع غ صیتبثیـی هی ثبكض

صع هعتی ک ثشاین صاص بیوبى ثؼض اػ ػیت یب من پبیگب صاص صثبع لبثل صؿتغؿی

ثبكض ث ایي ػبهل یبػهضین

ثغای اطویبى اػیک صاص بی تلیضی هب عی ثیلتغ اػ یک هبكیي جص صاعص یبػ ث

replication صاعین

ؿغع پبیگب صاص ثغی چضیي هبكیي اؿت یک تػیغ گضاعی replication صع دمیمت

master-slave-1جص صاعص mongoDBصع replicationص ع

2-replica set

صع غ ص ع یک ص اهلی اطالػبت كت كض عا هی گیغص ؿپؾ ثمی ی صب اطالػبت

عا هی ساض تالف هی کض ایي اطالػبت عا ث هعت غیغ وؼهبى صع سص ثیـض

www.ParsBook.org

Page 68: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

ػهبی ک replica setغ ص ع صاعای هکبیـن بی هلبثی صاعض ثب ایي تفبت ک صع

ص اهلی ث غ صلیلی اػ کبع ثیفتض یکی اػ صبی صیگغ تغفیغ عتج یبفت جبیگؼیي ص

آؿبى تپلژی recoveryوچیي صاعای لبثلیت بی صیگغی اػ جول اهلی هی كص

بی گـتغف پیچیض ... ثص اؿت ث ویي صلیل اججبع ػیبصی ثغای اؿتفبص اػ

replication master-slave ضاعین

اویت صاعص؟ replicationچغا

غ صیتبثیـی صع ثغاثغ هضهبت هذیطی ک صع آى اجغا هی كص آؿیت پظیغ اؿت صع دمیمت

replication ثغای هخبل صاعین:یک ع ثیو کغصى صاص بیوبى صع ثغاثغ ایي هضهبت اؿت

اتوبل كجک ثیي ؿغع ثغبه هبى لطغ كص-1

ت ؿغع جلگیغی کضیؼات ث دضی ػیبص ثبكض ک اػ ثغگلمن تج ػهبى-2

...

Master-Slave Replication

,backupب اؿت ک یک ثغای اجبم ػولیبت replicationیکی اػ ػوهی تغیي

failover, read scaling هعص اؿتفبص لغاع هی گیغص سیلی اؼطبف پظیغ اؿت

www.ParsBook.org

Page 69: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

A master with one slave

A master with three slaves

slaveایجاد می شود که هر نود slaveبا یک یا چند نود masterکه در ابتدا یک نود

. را می داند masterآدرس نود

www.ParsBook.org

Page 70: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

و برای را اجرا می کنیم mongod --masterرودست masterبرای شروع کردن یک

که mongod --slave --source master_addressدستور salveایجاد نود

را که ابتدا اجرا کرده ایم را باید بنویسیم masterآدرس

بروی یک ماشین اجرا می شود را مثال می زنیم البته می توان روی که یک مثال ساده

چندین ماشین نیز اجرا کنیم

و یک پورت را انتخاب می کنیم masterابتدا یک دایرکتوری برای ذخیره داده های

$ mkdir -p ~/dbs/master $ ./mongod --dbpath ~/dbs/master --port 10000 –master

کنیم که یک دیتادایرکوری و پورت جداگانه را برایش می slaveحاال شروع به پیکربندی

را مشخص کنیم که این کار masterنیاز داریم تا slaveانتخاب می کنیم که برای هر

تعیین می شود sourceبا گزینه ی

$ mkdir -p ~/dbs/slave $ ./mongod --dbpath ~/dbs/slave --port 10001 --slave --source

localhost:10000

شوند replicateبرگردانده یا masterباید به یک نود salveهمه ی نودهای

وجود ندارد slave به یک نود slaveکردن نود های replicateهیچ مکانیسمی برای

های خودش را نگه نمی دارد)توضیح داده می شود( slave oplog زیرا نود

Options

Option های مفیدی در رابطه باmaster-slave وجود دارد که به چندی از آنها اشاره

می کنیم

--only کردن استفاده replicateبرای مشخص کردن فقط یک دیتابیس برای salveبه روی نود

کردن همه ی دیتابیس ها است( replicateمی شود )که بصورت پیش فرض برای --slavedelay

برای اضافه کردن یک تاخیر در حد ثانیه است که برای استفاده کردن salveبه روی نود اجرا شده اند که از وارد کردن داده های masterدر زمانی است که عملیات از سوی

داده های مهم جلوگیری می کند ناگهانی پاک کردن نادرست یا

www.ParsBook.org

Page 71: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

Adding and Removing Sources

source–را ایجاد می کنیم با استفاده از slaveرا زمانی که masterما می توانیم

انجام می دهیم mongoDBمشخص کنیم اما می توانیم این کار را با استفاده از پوسته ی

را بدون هیچ slaveاست و ما localhost:27017بروی masterفرض کنید که یک

ها اضافه می کنیم sourcesرا به مجموعه ی master.سپس سورسی شروع می کنیم

$ ./mongod --slave --dbpath ~/dbs/slave --port 27018 به عنوان سورسی برای localhost:27017 اکنون شروع می کنیم به اضافه کردن

slave هایمان که ابتداshell را باز می کنیم و دستور زیر را اجرا می کنیم > use local > db.sources.insert({"host" : "localhost:27017"})

همگام شده است localhost:27017نگاه کنیم خواهیم دید که با slave’s logاگر به اگر یک جستجویی روی مجموعه ی سورس خود بالفاصله بهد از وارد کردن داده داشته

باشیم سندی را که وارد کرده ایم را مشاهده می کنیم > db.sources.find() { "_id" : ObjectId("4c1650c2d26b84cc1a31781f"), "host" : "localhost:27017" }

ها خاتمه ی همگام سازی را نشان می دهد که سند برای نشان داده این slave logیکی از همگام سازی به شکل زیر آپدیت می شود

> db.sources.find() { "_id" : ObjectId("4c1650c2d26b84cc1a31781f"), "host" : "localhost:27017", "source" : "main", "syncedTo" : { "t" : 1276530906000, "i" : 1

www.ParsBook.org

Page 72: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

}, "localLogTs" : { "t" : 0, "i" : 0 }, "dbsNextPass" : { "test_db" : true } }

Replica set

اهب تفبت ػوض ای ک صعاعص ایي .اؿت master-slaveصع دمیمت یک یغایق عی ع

اتشبة هی clusterیکی یـت.ک یکیق ث ػاى masterاؿت ک صیگغ صع ایي هضل

كص هی تض ث صیگغی صع ایوعت اػ کبع افتبصى تغییغ کض.

اؿت ک masterثب ایي جص ایي هضل ایطع ث ظغ هی عؿض ک صاعای یک ص

primary بم صاعص یک یب چض صslave اؿت کsecondararies بم صاعص

ثغی replicationآكب هی كین کبعکغص replicaهب اثتضا ثب پیکغثضی ؿبص

mongoDB عا تضیخ هی صین

www.ParsBook.org

Page 73: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

www.ParsBook.org

Page 74: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

Initializing a Set

است master-slaveکمی پیچیده تر از replica setتنظیمات ابتدا با تنظیمات یک مجموعه ی ساده و کوچک که شامل دو سرور است بحث خود را

می کنیمشروع .

در ابتدا دیتادایرکتوری را ایجاد می کنیم و پورت هر سرور را مشخص می کنیم$ mkdir -p ~/dbs/node1 ~/dbs/node2

تعیین می کنیم. replica setقبل از شروع بکار کردن سرور ابتدا یک نام برای Replica set خود را―blort‖ می نامیم.اکنون سرور خود را شروع بکار می کنیم

است که اجازه می دهد سرور بداند که replSet--تنها گزینه ی تازه ای که وارد می کنیم نیز است. Morton:10002است که شامل اعضای دیگر در blortعضوی از

$ ./mongod --dbpath ~/dbs/node1 --port 10001 --replSet blort/morton:10002

سرور های دیگر را در همان مسیر روشن می کنیم$ ./mongod --dbpath ~/dbs/node2 --port 10002 --replSet blort/morton:10001

اگر بخواهیم سومین سرور را اضافه کنیم که با یکی از دو دستور زیر این کار را انجام می دهیم

$ ./mongod --dbpath ~/dbs/node3 --port 10003 --replSet blort/morton:10001 $ ./mongod --dbpath ~/dbs/node3 --port 10003 –replSet blort/morton:10001,morton:10002

www.ParsBook.org

Page 75: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

توانایی خود شناسایی است که می توانیم یک سرور را replica setیکی از خوبی های به طور به طور اتوماتیک به همه ی نود ها mongoDBبه مجموعه اختصاص بدهیم و

اتوماتیک متصل شود

www.ParsBook.org

Page 76: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

ضویو ی

ال

www.ParsBook.org

Page 77: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

ثغای mongoک ـش ثغی اکخغ پلتفغم ب کبع سیلی آؿی اؿت mongoDBوت

جص صاعص ک ـش بی solaris دتی linux mac os x windowsپلتفغم بی

صالص کغص www.mongodb.orgغ پلتفغم عا هی تاى اػ ؿبیت

هذجت هی کین صع اهل ضف هب تظین ؿغع یب وبى mongoDBػهبی ک هب اػ وت

mongod اؿت ک ایي ؿغع ثغی یک ؿغع ک هی تاضmaster یبslave ثبكض

وت هی كص

اتشبة ـش ی هعص ظغ

صع ؿبیت هغثط گضاكت كض اؿت ک ایي ـش mongoDBـش بی سیلی هتػی اػ

كغع كض تب االى اصاه صاعص ث طع هخبل 1.6.0ب اػ ـش ی

1.6.1 1.6.15 1.7.0 1.7.2 1.7.10... .2.2.3

Windows Install

ؿپؾ اػ ؿبیت هعص تج کین ک ثتاین ـش ی هعص ظغ عا ثب صلت اتشبة کیناثتضا ثبیض

ثیت ثصى یؼ تج 64یب 32ثبیض ث عا صالص هی کین windowsظغ فبیل ػیپ كض

کین!

دبل یبػ ث یک صایغکتعی یبػ صاعین ک فبیل بی صیتبثیؾ عا صع آى طسیغ کین

.الجت هی تاین ایي ایجبص هی کین c:\data\dbفبیل عا صع لـوت ث هعت پیق فغى ایي

ثبیض اجغاصایغکتعی عا صع غجبی فبیل ؿیـتن سص ایجبص کین ثب ایي كغط ک ػهبى

تغییغ ثضینث صایغکتعی سصهى صایغکتعی عا

کغص این هی extractعا ثبػ هیکین ث صایغکتعی ک فبیل ػیپ كض عا صع آى cmdدبل

عا اجغا هی کین mongod.exeكض فبیل binعین اعص

$ bin\mongod.exe

www.ParsBook.org

Page 78: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

اگرررررغ صایغکترررررعی هرررررب صایغکترررررعی پررررریق فرررررغى جرررررص صع ایررررري جرررررب تغییرررررغات عا اعص

هی کین

$ bin\mongod.exe --dbpath C:\Documents and Settings\Username\My

Documents\db

POSIX (Linux, Mac OS X, and Solaris) Install

ثغای وت صع ایي پلتفغم ب ثبیض فبیل ػیپ كض عا اػ ؿبیت هعص ظغ صالص کین ؿپؾ ث

طغیك ػیغ هغادل عا صجبل هی کین

ث هعت پیق فغى ایي فبیل عا صع اثتضا ثبیض صایغتعی الػم ثغای فبیل بی صیتب عا ثـبػین

ایجبص هی کین.الجت هی تاین ایي صایغکتعی عا صع غجبی فبیل ؿیـتن data\db\لـوت

سص ایجبص کین ثب ایي كغط ک ػهبى اجغا ثبیض صایغکتعی عا ث صایغکتعی سصهى تغییغ

ثضین

$ mkdir -p /data/db $ chown -R $USER:$USER /data/db

ینهخل ػیغ ػول هی ک tar.gzثغای ثبػ کغصى فبیل بی

$ tar zxf mongodb-linux-i686-1.6.0.tar.gz $ cd mongodb-linux-i686-1.6.0

صایغکتعی عا صع هعت جص ثب توبم پضعبیق هی ؿبعص ثغای هخبل اگغ mkdirصؿتع

عا ایجبص هی کض data\db\ ؿپؾ صایغکتعی data\صایغکتعی

Chown ایي اهکبى عا هی صض ک ثتاین اجبػ كتي صع فبیل عا ث یک کبعثغ سبم

استوبم mongoDBسص ایجبص کین ث homeثضین یب هی تاین یک فلضع عا صع

صین

دبل ثغای كغع ث صایغکتعی ک فبیل ػیپ كض عا صع آى ثبػ کغص این هی عین صؿتئغ

ػیغ عا ایجبص هی کین

$ bin/mongod

ک ػهبی ک اػ صایغکتعی هتفبت ثغای صایغکتعی صاص اؿتفبص هی کین صایغکتعی عا صع

ایجب تغییغ هی صین

www.ParsBook.org

Page 79: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

$ bin/mongod --dbpath ~/db

www.ParsBook.org

Page 80: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

صضویو ی Shell

www.ParsBook.org

Page 81: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

عا ثغ صی ؿغع سص صع پعت mongodصع دبلت ػبصی فغى هب ثغ ایي اؿت ک هب

پیق فغى وت کغص این

اهب صع هعتی ک هبض دبلت ثبال جبكض اثتضا ث ؿغع پعت هغثط هل هی كین$ bin/mongo staging.example.com:20000

هل هی كین صع هعت اتوبل ث صیتبثیؾ testث هعت پیق فغى اثتضا ث صیتبثیؾ

ػیغ اؿتفبص هی کینصیگغ اػ صؿتع $ bin/mongo localhost:27017/admin

هتول هی admin صیتبثیؾ 27017ثغی پعت localhostصؿتع ثبال ث ؿغع

ثضى اتوبل ث یچ پبیگب صاص ای هتول كین اػ صؿتع shellوچیي هی تاین ث كص.

ػیغ اؿتفبص هی کین

$ bin/mongo --nodb MongoDB shell version: 1.5.3 type "help" for help >

یـت هب هی تاین databaseConnectionتب dbث یبص صاكت ثبكیض ک

connection بی هتفبتی ث هذیظ بی هتفبتی ک ؿغع صع آب لغاع صاعص صاكت

.ثبكین

صاكت ثبكین connectionهی تاین چضیي shardingثغای هخبل ثب اؿتفبص اػ > mongos = connect("localhost:27017") connecting to: localhost:27017 localhost:27017 > shard0 = connect("localhost:30000") connecting to: localhost:30000 localhost:30000 > shard1 = connect("localhost:30001")

connecting to: localhost:30001 localhost:30001

dbث ػاى هتغیغبی mongos shard0 shard1ثبثغایي هب هی تاین اػ

اؿتفبص کین

Shell Utilities

www.ParsBook.org

Page 82: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

هی تاین ث چضیي ؿغع هتول كین shellثب اؿتفبص اػ

> shard_db = connect("shard.example.com:27017/mydb") connecting to shard.example.com:27017/mydb mydb >

عا اجغا کین shellوچیي هی تاین صؿتعات هغثط ث > runProgram("echo", "Hello", "world") shell: started mongo program echo Hello world 0 > sh6487| Hello world

آى هغاجؼ کیض manualجص صاعص ک ثبیض ث shell ثـیبعی اػ کبعثغص بی جبلت

buildInfo

{"buildInfo" : 1} ـش كوبع ی mongoDBصؿتع ک تؿظ اصهیي اجغا هی كص اطالػبتی صع هعص

ی ؿغع ؿیـتن ػبهل هیؼثبى هی صض

collStats

{"collStats" : collection} یؼ ایضکؾ ب هی بصاص ب فضبی طسیغ ؿبػی ؿؼ اطالػبتی صع هعص هجوػ ب ؿبی

صض

Distinct

{"distinct" : collection, "key": key, "query": query} اعػ كبی هتفبت کلیض بی یبفت كض صع پغؽ جی جبعی عا هی صض

Drop

{"drop" : collection}

و ی اطالػبت صعى یک هجوػ عا دظف هی کض

dropDatabase

{"dropDatabase" : 1}

www.ParsBook.org

Page 83: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

و ی صاص ب عا اػ صیتبثیؾ جبعی دظف هی کض

dropIndexes

{"dropIndexes" : collection, "index" : name}

عا اػ هجوػ دظف هی کض صع هعتی ک بم "*" ثبكض nameو ی ایضکؾ ب ثب بم

و ی ایضکؾ ب عا دظف هی کض

getLastError

{"getLastError" :1} سطبب ؿبیغ ضؼیت بی ایجبص كض تذت آسغیي ػولیبت عا وبیق هی صض

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

صؿتع ثبال تؼضاص اؿبصی عا ک تذت تبحیغ آپضیت لغاع گغفت اض عا وبیق هی صض

isMaster

{"isMaster" : 1}

slaveاؿت یب masterؿغع عا چک هی کض تب ثجیض ک

listCommands

{"listCommands" : 1} هعص آبى عا وبیق لیـت صؿتعات هجص ثغی ؿغع جبعی عا وغا ثب تضیذبتی صع

هی صض

www.ParsBook.org

Page 84: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

listDatabases

{"listDatabases" : 1}

صؿتعی ک تؿظ اصهیي اجغا هی كص لـیت صیتبثیؾ ب عا ث هب هی صض

Ping

{"ping" : 1}

جص صاكتي ؿغعی عا چک هی کض ایي صؿتع ث ؿغػت تیج عا ثغهی گغصاض دتی اگغ

ؿغع لفل كض ثبكض

renameCollection

{"renameCollection" : a, "to" : b}

تغییغ بم هی صض ثبیض غص صاعای بم کبهل ثبكض ثغای هخبل b عا ث aهجوػ ی

foo.bar ث هجوػ یbar صع صیتبثیؾfoo اكبع صاعص

repairDatabase

{"repairDatabase" : 1} فلغص هی کض ک هوکي اؿت یک صؿتع ثب هضت ػهبى پبیگب صاص ی جبعی عا تؼویغ

اجغای طالی ثبكض

serverStatus

{"serverStatus" : 1}

آهبع بی اجغایی ثغای ؿغع جبعی عا هی صض

www.ParsBook.org

Page 85: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

3ضویو ی

www.ParsBook.org

Page 86: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

Wire Protocol

TCP/IPصؿتیبثی صاعض اػ یک پغتکل ؿیوی mongoDBصعایعبی ک ث ؿغع

BSONاؿتفبص هی وبیض ک ث هعت اؿبؿی كبهل یک پكق ضشین صع صاص بی

ثبیت ضع صیتب بم هجوػ لیـت 20یبػ ث insertاؿت.ثغای هخبل ثغای یک صؿتع

ثغای عص ث هجوػ ی هعص ظغ صاعین BSONاؿبص

Data Files

هجص اؿت.فبیل data/dbػال ثغ جص صیتب صایغکتعی ک ثوعت پیق فغى صع

چض ns.بی جضاگب صیگغی ثغای غ پبیگب صاص جص صاعص غ صیتبثیؾ كبهل یک فبیل

فبیل صیتب اؿت ک ث طع یکاست تؼضاص آى ب صع دبل گـتغف اؿت

foo.0 foo.1 foo.2 فبیل بی foo.nsدبی یک غبیل ثبم fooثبثغایي صیتبثیؾ

غیغ هی ثبكض.

اضاػ ی فبیل بی صاص ثغای یک پبیگب صاص ثضیي هعت اؿت ک غ فبیل ص ثغاثغ هی

گیگ ثبیت سص ثغؿض 2كص تب ث اضاػ ی هبکؼیون

ایي عفتبع ثبػج هی كص ک صع طسیغ ؿبػی صیتبثیؾ بی کچک هلکل ث ضع عفتي

بی عی صیـک فضببی ػایض عا ضاكت ثبكین صیتبثیؾ بی ثؼعگ صع هکبى بی فضب

ؼصیک ن طسیغ كض

www.ParsBook.org

Page 87: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

mongoDB ن چیي صیتب فبیل بی عا اػ لجل ث صیتبثیؾ ب استوبم هی صض ک ایي کبع

--ثبػج کبعایی ثتغ ؿیـتن هی كص ک ثغای غیغفؼبل کغصى ایي لبثلیت کبفی ؿت صؿتع

noprealloc عا اجغا کین

ػهبی ک فبیلی پغ كص هعت هی mongoDBاستوبم صاصى صع پلت ػهی ی

صیتبفبیل بی اضبفی سبلی عا ثغای غ mongoDBگیغص.ایي ثضاى هؼی اؿت ک ؿغع

صیتبثیؾ گضاعی هی کض اػ اؿتفبص كضى آب ثغای تشوین صاصى فضب جلگیغی هی کض

Namespaces and Extents

سازماندهی می شود.اسنادی که به namespaceدر دیتافایل ها هر دیتابیس در قالب یک

یک مجموعه متعلق دارد دارای فضای نام مخصوص به خودش را دارد

های از دیتافایل ذخیره می sectionاطالعات مربوط به هر فضای نام در روی دیسک در

نام دارد extentشود که

سه دیتا فایل وجود دارد که هر یه از قبل اختصاص داده شده fooر در دیتابیس در شکل زی

هایی که به چندین فضای extentsاند ولی خالی می باشند.دو تای اول از دیتافایل ها به

نام تعلق دارند تقسیم شده اند

www.ParsBook.org

Page 88: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

چند نکته ی جالب در مورد شکل باال وجود دارد:

هایی از نوع متفاوت باشد که ازوما در روی extentsهر فضای نام می تواند دارای

دیسک به صورت پیوسته قرار ندارد

هایی که extentsهای trackفضای نامی است که freelist$همچنین نشان می دهد که

به مدت زمان زیادی استفاده نشده را نگه می دارد

را freelistود ابتدا تازه ای اختصاص داده می ش extentsزمانی که به یک فضای نام

را جستجو می کند extents برای پیدا کردن یک فضای مناسب با

www.ParsBook.org

Page 89: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

هغاجغ:

wowebook_Oreilly.MongoDB

.The.Definitive.Guide.Sep.20

10 –

Kyle Banker — MongoDB in

Action — 2011

MongoDB-Manual

www.ParsBook.org

Page 90: MongoDB€¦ · mongoDB یفغؼه مّص لوف mongoDB عص صْجْه نیُبفه مْؿ لوف mongoDB بث عبک عّغك معبِچ لوف بُْج ّ ؽغپ نجٌپ لوف

www.ParsBook.org