رقصنده با کد – Telegram
رقصنده با کد
781 subscribers
1.69K photos
850 videos
207 files
666 links
Here are some interesting things I've come across during my learning process. That's it. Admin ID:
@alithecodeguy
Download Telegram
خلاصه تجربیات تلخ این چند روز :
اگر قبلا Sql کار می‌کردید و الان شیفت دادید به NoSql ، قبل از انجام هر کاری حتما کانسپت‌های اصلی و داکیومنت دیتابیس و درایور موردنظرتون رو بخونید.
هر گردی گردو نیست.
مقایسه populate و lookup در MongoDB
لینک اصلی :
https://medium.com/cameoeng/mongodb-lookups-and-populates-an-unexpected-journey-940e08e36a94
روی MongoDB اگر میخواهید ببینید که مقدار مورد نظرتون داخل آرایه ای که روی یک فیلد ذخیره شده ، وجود داره یا نه ، سراغ روش‌های عجیب غریب نرید. از ویژگی های خود منگو استفاده کنید. برای مثال بالا بنویسید :
db.<collection_name>.find( { tags: "red" } )
خروجیش میشه همه documentهایی که مقدار red یکی از اعضای tags داخلشونه.
ولی حواستون باشه اگر بخواهید بیشتر از یک آیتم رو روی یک آرایه چک کنید باید ترتیب هم رعایت کنید مثلا :
db.<collection_name>.find( { tags: [ "blank", "red" ] } )
برای چک کردن nested object ها هم از همچین سینتکسی برای مثال بالا میتونید استفاده کنید :
db.<collection_name>.find( { "size.uom": "in" } )
در آخر هم برای اینکه فقط چندتا فیلد رو برگردونید میتونید بنویسید :
db.<collection>.find( {}, { _id: 0, item: 1, status: 1 } );
معنی ۱ این میشه که اون فیلد رو برگردون ، صفر هم میشه برنگردون. وقتی از این روش استفاده میکنید همه فیلدها صفر میشه به جز اونا که خودتون ۱ کردید و فیلد _id. برای اینکه فیلد _id هم نیاد باید صریحا مقدارش رو صفر کنید.
نکته : بهتره که مقدار _id رو توی ریسپانس برنگردونید
#mongodb #nosql
نکته :‌ در Mongodb ، مقدار ()Date با ()new Date ظاهر یکسانی دارن ولی از Typeهای مختلفی هستن. اولی String برمیگردونه ولی دومی Date. در واقع اگر دنبال معادلش میگردین مقدار ()new Date دقیقا برابره با ()ISODate
واحد زمانی هم که منگو استفاده میکنه مشابه چیزیه که بقیه حوزه های کامپیوتر ازش استفاده میکنن. در واقع یک استاندارد جهانیه.
تعداد میلی ثانیه ها از مبدا یکم ژانویه ۱۹۷۰ رو به فرم یک signed 64-bit integer برمیگردونه که میتونید به شکل های مختلف فرمتش کنید که مثلا به حالت سال ماه روز یا چیزای مشابه نمایش بده.
#mongodb #nosql
قواعد انتخاب نام در Mongodb :
۱- به بزرگی و کوچکی حروف حساس نیست.
۲- از بعضی کاراکترها در شرایط زیر نمی‌توانید استفاده کنید :
الف) اگر منگو روی ویندوز دیپلوی شده است : /\. "$*<>:|?
ب) اگر منگو روی لینوکس و یونیکس بیس ها دیپلوی شده است : /\. "$
۳- نمی‌تواند شامل فضای خالی باشد
۴- حداکثر ۶۴ کاراکتر
۵- اسامی باید با یک _ یا حرف شروع شود و نمیتواند شامل موارد زیر باشد :
الف) $ ( اسامی فیلدها نباید با این شروع شوند)
ب) رشته خالی
ج) null
د) نمی‌تواند با کلمه system شروع شود.
نکته خیلی مهم : قواعد نام گذاری در منگو مثل زبان‌های برنامه نویسی یک قاعده کلی نیست. و برای اسامی دیتابیس ها ، کالکشن‌ها و فیلدها قواعد متفاوتی وجود دارد و ۵ مورد بالا در واقع اشتراک این قوانین است. سعی کنید از همین قواعد مشترک استفاده کنید تا بعدا سردرگم نشوید.
#mongodb #nosql
رقصنده با کد
روی MongoDB اگر میخواهید ببینید که مقدار مورد نظرتون داخل آرایه ای که روی یک فیلد ذخیره شده ، وجود داره یا نه ، سراغ روش‌های عجیب غریب نرید. از ویژگی های خود منگو استفاده کنید. برای مثال بالا بنویسید : db.<collection_name>.find( { tags: "red" } ) خروجیش میشه…
توی منگو برای دسترسی به ایندکس خاصی روی یک آرایه ، می‌تونید از دات نونتیشن (همون نقطه) روی یک فیلد به همراه ایندکس مد نظرتون استفاده کنید ، ولی ۲ تا نکته رو مد نظر داشته باشید :
۱- ایندکس ها از صفر شروع می‌شن.
۲- هر جا از دات نوتیشن استفاده کردید ، فیلد و ایندکس با هم دیگه باید داخل کوتیشن نوشته بشن. مثال :
db.<collection_name>.find({"tags.1":"red"})
یه نکته پیشرفته هم اگر بخوام بگم اینه اگر میخواید روی همه آیتم‌های یک آرایه روی یک فیلد مشترک در همه داکیومنت های یک کالکشن ، کار خاصی رو انجام بدید ، میتونید از positional operator یا همون []$ استفاده کنید. مثال :
db.students.update(
{ },
{ $inc: { "grades.$[]": 10 } },
{ multi: true }
)
فیلد multi : true به خاطر اینه که داریم از update استفاده می‌کنیم
#mongodb #nosql
نکات کار با فیلد‌های آرایه‌ای در Mongodb :
۱- فیلد آرایه ای شامل یک آیتم خاص:
db.inventory.find( { tags: "red" } )
۲- فیلد آرایه ای شامل چند آیتم خاص همراه با رعایت ترتیب : (فقط آرایه ای که دقیقا معادل باشد)
db.inventory.find( { tags: ["red", "blank"] } )
۳- فیلد آرایه ای شامل چند آیتم بدون رعایت ترتیب : (آرایه باید شامل این آیتم ها باشد ولی میتواند آیتم‌های دیگری نیز داشته باشد)
db.inventory.find( { tags: { $all: ["red", "blank"] } } )
۴- فیلد آرایه ای که حداقل یکی از آیتم‌های آن شرط را پاس کند :
db.inventory.find( { dim_cm: { $gt: 25 } } )
۵- فیلد آرایه ای که حداقل یکی از آیتم‌های آن یکی از شروط را پاس کند :
db.inventory.find( { dim_cm: { $gt: 15, $lt: 20 } } )
۶- فیلد آرایه ای که حداقل یکی از آیتم‌های آن همه شروط را پاس کند :
db.inventory.find( { dim_cm: { $elemMatch: { $gt: 22, $lt: 30 } } } )
۷- فیلد آرایه ای بر اساس طول آرایه :
db.inventory.find( { "tags": { $size: 3 } } )
۸- فیلد آرایه ای بر اساس ایندکس :
db.<collection_name>.find({"tags.1":"red"})
آخرین نسخه MongoDB روی سیستم های 32 بیتی نصب نمیشه. در واقع از ورژن ۳.۴ به بعد دیگه نصب نمیشه.
همچنین فقط روی ویندوز ۱۰ ، مک او اس ۱۰.۱۳ و ابونتو ۱۶.۰۴ به بعد نصب میشه. دنبال نصبش روی ورژن‌های قبلی نباشید.
اگر مجبورید روی سیستم ضعیفی ازش استفاده کنید برید سراغ ورژن‌های قبل از ۳.۴.
برای دوستان رد هتیمون هم ، درجریان باشید که منگو روی کرنل‌های UEK کار نمیکنه و باید از کرنل RHCK استفاده کنید.
سعی کنید برای محیط آزمایشگاهیتون ، منگو رو روی لینوکس نصب کنید چون به احتمال قریب به یقین ، محیط productionتون روی لینوکس خواهد بود مگر اینکه واقعا بدونید بعدا از چی میخواید استفاده کنید.
#mongodb #nosql
یه خواهش کلی از همه دوستانمون مخصوصا لینوکسی ها...
لطفا لطفا لطفا برای محیط production ، انجام hardening یادتون نره. میدونم احتمالا انجام هم ندید کسی متوجه نمیشه و شاید این کلمه رو هم خودتون تا حالا نشنیده بودید. معنیش این میشه طبق داکیومنت‌های موجود مواردی از جمله security رو تقویت کنید. آیتم های خیلی زیادی هست و فقط انتخاب پسوورد قوی کافی نیست.
این ربطی به دیتابیس و زبان برنامه نویسی و ... نداره. هر چیزی که به شبکه وصل میشه ( یا به طور کلی به برق وصل میشه ) باید روش hardening انجام بشه. چه برسه که این چیز محصولی باشه که ازش قراره کسب درآمد بشه.
دنبال تفاوت نسخه community و enterprise روی mongodb نباشید.
نسخه community نصب کنید بره.
#mongodb #nosql
برای کار به دیتابیس منگو راه‌های زیادی هست. اکثرا میرن سراغ استفاده از نرم افزار گرافیکی compass ولی بدونید که خیلی کار مدیریتی خاصی نمیتونید باهاش انجام بدید و اگر گیر کنید باید بیاید سراغ shell.
معروفترینشون که همه میشناسن mongo shell هستش ، ولی بدونید منگو داره روی شل دیگه ای کار میکنه به نام mongosh که هنوز فقط ورژن بتاش رو داده.
شل mongo به صورت پیش فرض همراه با دیتابیس منگو نصب میشه ولی به صورت مجزا هم میتونید نصبش کنید که در ادامه چندتا مثال ازش میارم.
راه اندازی شل mongo: (اگر مسیر فایل اجرایی به PATH اضافه شده باشه)
$mongo
اتصال شل mongo به یک پورت دیگه به جز پورت پیش فرض ۲۷۰۱۷:
$mongo --port 28015
وصل شدن به یک دیتابیس ریموت :
$mongo "mongodb://mongodb0.example.com:28015"
یا
$mongo --host mongodb0.example.com:28015
یا
$mongo --host mongodb0.example.com --port 28015
وصل به شدن به سرور ریموت اگر یوزر پسوورد گذاشته باشید: (بعد از اتصال پسوورد میخواد)
$mongo "mongodb://alice@mongodb0.examples.com:28015/?authSource=admin"
#mongodb #nosql
توی منگو مثل لینوکس میتونید prompt رو تغییر بدید. مثلا توی شل منگو بنویسید :
cmdCount = 1;
prompt = function() {
return "Uptime:"+db.serverStatus().uptime+" Documents:"+db.stats().objects+ “ “ + db+"@"+host+ “ “+(cmdCount++) + "> ";
}
باعث میشه prompt منگوتون این شکلی بشه و یک سری اطلاعات اضافی نمایش بده :
Uptime:5897 Documents:6 test@myHost1 3>
موقع کار با اعداد توی Mongodb خیلی حواستون باشه.
منگو ، درایورا و جاوا اسکریپت ، هر کدوم رفتار خودشون رو با اعداد دارن.
اگر دیتای حساس دارید قبل از استفاده از اعداد ، مخصوصا اعشاری ها و اعداد بزرگ ، حتما از اشتراک رفتاراشون استفاده کنید که بعدا مشکل نخورید.
یه نکته خیلی باحال از جاوا اسکریپت 😁
چه جوری یک property رو از یه آبجکت حذف کنیم؟
توی تصویر میبینید چه قدر خلاقانه با استفاده از spread operator این کار رو انجام داده.
منبع :
https://dev.to/darksmile92/js-use-spread-to-exclude-properties-1km9
#js #javanoscript