توابع تجمعی در مونگو دی بی(AGGREGATION IN MONGODB)-قسمت دوم

توابع تجمعی در مونگو دی بی

اول از همه باید بگم اگه قسمت اول و نخوندید ، بهتون پیشنهاد میکنم از اینجا یه نگاهی بهش بندازید.

در قسمت قبل $group و با هم بررسی کردیم ، حالا وقت اون رسیده که بریم سراغ بقیه ی قسمت ها

$project stage

کارهایی که اینجا میتونیم انجام بدیم ، حذف یک کلید ، اضافه کردن یک کلید ، تغییر یک کلید و فانکشن هایی که میتونیم استفاده کنیم :

۱- $toUpper

۲-$toLower

۳-$add

۴-$multiply

خب بازم رو داده های قبلی یه مثال میزنم:


use agg
db.products.aggregate([
    {$project:
     {
	 _id:0,
	 'maker': {$toLower:"$manufacturer"},
	 'details': {'category': "$category",
		     'price' : {"$multiply":["$price",1]}
		    },
	 'item':'$name'
     }
    }
])


خروجیش هم میشه : ‎بیشتر بخوانید

توابع تجمعی در مونگو دی بی(Aggregation in MongoDB)

توابع تجمعی در مونگو دی بی

کلا اول باید بگم که aggregation ها خیلی بدرد بخورن و کار راه اندازن ولی یکم تسلط بهشون زمان بره چون چند بخشن ، پس بهتون پیشنهاد میدم که با حوصله و یکم وقت این پست و احتمالا با یه پست دیگه رو باید بخونید ، سعی کردم خیلی روون بگم و توضیح بدم ولی احتمالا یکم طولانی میشه و من هم سعی میکنم مختصرش کنم 🙂

خب اول با یک مثال ساده شروع میکنیم ، فرض کنید داده هایی مثل داده های زیر داریم :

Name manufactorer Category Price
iPad 16GB Wifi Apple Tablets ۴۴۹٫۰۰
iPad 32GB Wifi Apple Tablets ۵۹۹٫۰۰
iPad 64GB Wifi Apple Tablets ۶۹۹٫۰۰
Galaxy S3 Samsung Cell Phone ۵۶۳٫۹۹
Galaxy Tab 10 Samsung Tablets ۴۵۰٫۹۹
Vaio Sony Laptops ۴۹۹٫۰۰
Macbook Air 13inch Apple Laptops ۴۹۹٫۰۰
Nexus 7 Google Tablets ۱۹۹٫۰۰
Kindle Paper White Amazon Tablets ۱۲۹٫۰۰
Kindle Fire Amazon Tablets ۱۹۹٫۰۰

 که  خب اگه تعداد محصولات هر کارخانه رو در اس کیو ال خواسته باشیم یه کدی شبیه به کد زیر داریم :


select manufactorer , count(*) from products goup by manufactorer 

که خب یه خروجی هم مثل زیر داریم :

Count(*) manufactorer
۴ Apple
۲ Samsung
۱ Sony
۱ Google
۲ Amazon

حالا این داده ها رو ایمپورت میکنیم :


use agg
db.products.drop()

db.products.insert({'name':'iPad 16GB Wifi', 'manufacturer':"Apple",'category':'Tablets','price':499.00})
db.products.insert({'name':'iPad 32GB Wifi', 'category':'Tablets','manufacturer':"Apple",'price':599.00})
db.products.insert({'name':'iPad 64GB Wifi', 'category':'Tablets','manufacturer':"Apple",'price':699.00})
db.products.insert({'name':'Galaxy S3', 'category':'Cell Phones','manufacturer':'Samsung','price':563.99})
db.products.insert({'name':'Galaxy Tab 10', 'category':'Tablets','manufacturer':'Samsung','price':450.99})
db.products.insert({'name':'Vaio', 'category':'Laptops','manufacturer':"Sony",'price':499.00})
db.products.insert({'name':'Macbook Air 13inch', 'category':'Laptops','manufacturer':"Apple",'price':499.00})
db.products.insert({'name':'Nexus 7', 'category':'Tablets','manufacturer':"Google",'price':199.00})
db.products.insert({'name':'Kindle Paper White', 'category':'Tablets','manufacturer':"Amazon",'price':129.00})
db.products.insert({'name':'Kindle Fire', 'category':'Tablets','manufacturer':"Amazon",'price':199.00})

‎بیشتر بخوانید

نصب پایتون (Python) به همراه Bottle و پای مونگو(Pymongo)

نصب پایتون به همراه Bottle و پای مونگو

خب حالا دیگه میریم سراغ نصب پایتون و یک فریم ورک برای وب پایتون!

اول از همه میریم به سایت پایتون  و آخرین نسخه رو برای سیستم عاملتون دانلود میکنید و next, next میکنیم تا نصب بشه! :دی

بعد از نصب میریم تو Mycompute>properties>Advanced SystemSetting>Environmetn Variables کلیک میکنیم

عکس موجود نیست.

عکس موجود نیست.

در شکل بالا از قسمت System Variables > Path و پیدا میکنیم و edit و میزنیم آخر Variable value یه سیمیکالن میزاریم(;) و بعد هم آدرس جایی که پایتون و نصب کردیم میدیم، که پیش فرض تو این آدرسه : C:\Python27که ۲۷(البته بدون دات) هم ورژن پایتونه دیگه :دی ، خلاصه بعد از دادن آدرس اوکی میکنیم و تمامممممم.

برای نصب Bottle میریم به سایتش و آخرین نسخه stable و دانلود میکنیم.که میتونید از اینجا به سایتش برید.

همونطوری که در سایت گفته نصبش خیلی راحته:

عکس موجود نیست.

فقط کافیه که کامند  رو داخل ترمینال بزنیم ، که البته باید با حالت زیر رو به رو شیم :دی

عکس موجود نیست.

که بخاطره اینه که setup tools و نصب نداریم :دی

سریع میریم به این سایت و اسکریپتی و که گفته دانلود میکنیم

عکس موجود نیست.

بعدشم روش دابل کلیک میکنیم تا کارش و بکنه و یک فایل به اسم easy_install.exe داخل پوشه ی scripts که جایی که پایتون و نصب کردین دانلود کنه ! یعنی برای من میشه : c:\python27\scripts\easy_install.exe.خب اینم سریع next , next میکنیم و نصب میشه !

اما اگه مثل من به مشکل خوردید و فایل easy_install.exe رو نتونست ایجاد کنه ، هیچ نگران نباشید :دی از ورژنهای قبلشی استفاده میکنیم خیلی هم خوبه تازه :))

از این لینک دانلود میکنیم و نصب میکنیم.

عکس موجود نیست.

دانلود میکنیم و نصب میکنیم !خب حالا ترمینال و باز میکنیم و میریم به این آدرس :

>cd c:\Python27\Scripts
>easy_install.exe -U botlle

اگه حالا مثل من بازم به ارور خوردید یه کار دیگه میکنیم که این دفعه مرتفع میشه ! :دی

 میریم به این ورژن  و نسخه ۶۴ بیتی اگه هستین دانلود میکنید ! فایل و میریزیم داخل پوشه ی

C:\python27\scripts

اگه پوشه ی scripts نیست ایجادش میکنیم خودمون :دی

حالا ترمینال و باز میکنیم میایم به این آدرس :

>cd c:\Python27\Scripts
>python ez_setup.py -U bottle

 

و در نهایت هم به ما این و میگه :

عکس موجود نیست.

و هوراااااااااااااااا :)))

اگه بازم حالا به هر دلیلی به مشکل خوردید هیچ ایرادی نداره :دی میتونید از سایت خود bottle از این قسمت فایل bottle.py بگیرید و داخل پوشه پروژه بزارید و حالش و ببرید:))

عکس موجود نیست.

برای نصب pymongo میریم به این آدرس و روی آخرین ورژن و انتخاب میکنیم و بعدشم میریم به قسمت Installing / Upgrading و حالا هم پکیجه ویندوز  وانتخاب میکنیم و بر اساس ورژن پایتونتون میگیرید فایل و .

عکس موجود نیست.

و بعد از نصب هم دابل کلیک میکنید و نصب و اجرا و کلا تماممممممممممممممممممم.به همین راحتی به همین خوشمزگی 🙂

آموزش نصب سریع مونگو دی بی

نصب مونگو دی بی

خب برای نصب مونگو دی بی روی ویندوز باید دقت کنید که روی سیستم های ۳۲ بیتی تا ۲ گیگ بیشتر نمیتونه ساپورت کنه !

   برای نصب هم اول از همه میرید به سایت مونگو دی بی و آخرین ورژن و دانلود می کنید ، بعد از دانلود هم اون و اکسترکت میکنید و میریزید مثلا تو این مسیر C:\mongodb  یا هر مسیر دلخواه دیگه.

بعد از این کار لازمه که یک پوشه ایجاد کنید برای ذخیره سازی دیتابیس ها. ترمینال (CMD)و باز میکنیم

cd C:\
md data
md data\db

اجرا میکنیم.بعد از اون این کامند و اجرا میکنیم :

C:\mongodb\bin\mongod.exe

که البته اگه مسیر پوشه ی دیتابیس ها رو جای دیگه داده باشیم با این سوئیچ معرفی میکنیم مسیر جدید و

C:\mongodb\bin\mongod.exe --dbpath C:\test\mongodb\data

و تمام ! البته اگه ترمینال و ببندید می بینید که اجرای مونگو دی بی هم تموم میشه! برای اینکه بعنوان یک سرویس مونگو دی بی اجرا بشه این کارا رو انجام میدیم :

md C:\mongodb\log
echo logpath=C:\mongodb\log\mongo.log > C:\mongodb\mongod.cfg
C:\mongodb\bin\mongod.exe --config C:\mongodb\mongod.cfg --install
net start MongoDB

و حالا دیگه تمومه ! فقط برای اینکه یه تستی هم از سیستم گرفته باشیم :

C:\mongodb\bin\mongo.exe
db.test.save( { a: 1 } )
db.test.find()

که خروجیش و می بینیم ، البته برای اینکه بتونیم مرتب تر ببینیم از کامند prettyهم در انتهاش میتونیم استفاده کنیم :

db.test.find().pretty()

البته یه چند تا سوئیچ دیگه هم هست که گفتنش شاید خالی از لطف نباشه :

C:\mongodb\bin\mongod.exe --help
C:\mongodb\bin\mongod.exe --version

 

آسیب پذیری در مونگو با پی اچ پی

آسیب پذیری در مونگو با پی اچ پی

یکی از اشتباهات رایجی که مرسومه اینه که فکر میکنیم مونگو شبیه اس کیو ال ,اینجکشن (sql Injection)نداره و برای همین خیلی از ورودی ها رو باز میزاریم. اما خب اینطوری نیست و اگه یکم دقت کنیم میبینیم چقدر ساده هم میشه نفوذ کرد تا یه حدی .مثلا برای صفحه لاگین و مثال همیشگی برای مونگو داریم :

$collection->find(array(
"username" => $_GET['username'],
"passwd" => $_GET['passwd']
));

که همون و برای اس کیو ال اینطوری داریم :

mysql_query("SELECT * FROM collection
WHERE username=" . $_GET['username'] . ",
AND passwd=" . $_GET['passwd']);

برای حمله به اس کیو ال فقط کافیه که پارامتر پسورد و با یک OR آلوده کنیم

login.php?username=admin&passwd=" OR 1 --

حالا اگه بخوایم به مونگو حمله کنیم فقط کافیه به جای OR پارامتر پسورد و به صورت یک آرایه بفرستیم که not equal باشه و در نتیجه همون کار OR و انجام میده برامون :−) به همین راحتی و به همین خوشمزگی

login.php?username=admin&passwd[$ne]=1

که خب خروجی کارمون اینطوری میشه :

$collection->find(array(
"username" => "admin",
"passwd" => array("$ne" => 1)
));

و حالا اگه همین و به جای یوزر بفرسته میتونه لیست همه ی کاربر ها رو ببینه. :−|

برای اینکه اینطوری و به این ضایعی دور نخوریم باید همیشه تایپ (نوع ) مقداری و که میفرستیم چک کنیم :

$collection->find(array(
"username" => (string)$_GET['username'],
"passwd" => (string)$_GET['passwd']
));

خب اینطوری همه به رشته تبدیل میشن :−)

 یه بحث اسکریپت اینجکشن هم داریم که باید واقعا به اون حواسمون باشه که حالا یه وقت دیگه در موردش مینویسم .

برای اطلاعات بیشتر در مورد این دو بحث میتونید به  اسکریپت اینجکشن( php.net) و اینجا(mongodb.org) مراجعه کنید.

انتقال اکسس لاگ فایل های آپاچی به مونگو دی بی

انتقال اکسس لاگ فایل های آپاچی به مونگو دی بی

همون طوری که هممون میدونیم لاگ فایل ها خیلی بدرد بخوردن . چه زمانی که بخواید یه آنالیزه ساده انجام بدید چه زمانی بخواید حالا دیتا ماینینگ با وسعت بزرگتر و دقیق تری انجام بدیم .

حالا با همچین حجم انبوه لاگ فایل ها و ….. برای راحتی کار من فقط اکسس لاگ هارو میخوام انتقال بدم.فایدش همونطوری هم که بالا گفتم زمانیه که  بخوایم لاگ ها رو  یه نگاه بندازیم یا اینکه بخوایم  با کد پی اچ پی یا هر چیز دیگه یه سری فعل و انفعالات روش انجام بدیم قدر مسلم اگه این اطلاعات روی یه دیتابیس خوب که به درد به اصلاح بیگ دیتا ها هم بخوره داشته باشیم خیلی کارمون راحت تره و هم اینکه حتی بررسی رو هم یه جورایی سهل تر میکنه برامون.

فعلا فرض و بر این میزاریم که هممون با  NOSQL, mongoDB آشناییم و میخواییم این اکسس لاگ های آپاچی(access_log apache)و انتقال بدیم به مونگو . برای این کار چندین راه وجود داره که خب سعی میکنم دو تا رو بگم :

در مرحله اول خب میدونیم مونگو فرمت های جیسون(json) و متوجه میشه پس برای همین باید لاگ هامون و به فرمت جیسون دربیاریم.

میریم تو تنظیمات آپاچی مون : ‎بیشتر بخوانید