آشنایی با دستور findOne در مانگو دی بی

آشنایی با دستور findOne در مانگو دی بی

در این مقاله آشنایی با دستور findOne در مانگو دی بی از بخش آموزش مانگو دی بی و عملیات CRUD در مانگو دی بی پس از آموزش مقاله آشنایی با دستور InsertMany در مانگو دی‌ بی می خواهیم نحوه استفاده از متد ()findOne در مانگو دی بی را به جهت بازگردانی و نمایش اطلاعات یک سند Document از کالکشن Collection یاد خواهید گرفت.

متد ()findOne در مانگو دی‌ بی چه کاربردی دارد؟

شما با استفاده از متد ()findOne در مانگو دی بی می توانید اطلاعات یک سند Document از کالکشن Collection بازگردانی و نمایش دهید.

معرفی متد ()findOne در مانگو دی بی

متد ()findOne در واقع اطلاعات یک سند از کالکشن Collection را واکشی و نمایش می ­دهد که این واکشی و بازگردانی و نمایش اطلاعات یک سند Document می­ تواند شرایط خاصی که داشته باشد را برآورده کند.

ساختار دستور متد ()findOne در مانگو دی بی به شکل زیر است:

db.collection.findOne(query, projection)

متد ()findOne دو تا پارامتر ورودی اختیاری می ­پذیرد که query و projection است.

  • مقدار query مشخص­ کننده سندی یا Document است که شرایط و معیارهای انتخاب سند در کالکشن را مشخص می­ کند.
  • مقدار projection مشخص­ کننده فیلدها و ستون­ هایی که در سند یا Document می­ خواهید برگردانید و نمایش دهید را مشخص می­ کند.

اگر در متد پارامتر query را حذف کنید، متد ()findOne به صورت طبیعی اولین سندی Document که در کالکشن Collection به ترتیب قرارگیری در دیسک است را بر می­ گرداند و نمایش می­ دهد.

و اگر شما مقدار پارامتر projection را مشخص نکنید متد ()findOne تمام فیلدهای سند Document را واکشی و نمایش می­ دهد.

در متد ()findOne برای اینکه مشخص کنید که یک یا چند فیلد یا ستون را به صورت مشخص و دستی انتخاب کنید بایستی دستور را به شکل زیر اطلاعات را درج کنید:

{field1: value, field1: value, ... }

اگر شما در مشخص کردن ستون­ های سند پارامتر value برابر true یا 1 باشد.

مانگو دی بی مقدار ستون و یا فیلد را به شما نمایش خواهد داد و در صورتی مقدار value برابر false یا 0 باشد مانگو دی بی نشان می­ دهد که در این سند Document مقداری با پارامتری که مشخص کردید وجود ندارد و مقداری را نمایش نمی­ دهد (خطا هم نمی ­دهد).

به صورت پیش ­فرض، پارامتر id_ در نمایش ستون­ های سند مانگو دی بی همیشه مقدارش را در واکشی و خروجی اسناد نمایش می ­دهد.

و برای عدم نمایش مقدار فیلد id_ در خروجی بایستی به صراحت مقدار id: 0_ در پارامتر ورودی projection قرار دهید. (تا در نتیجه خروجی سند نمایش داده نشود)

اگر در متد ()findOne هر پارامتر ورودی query مقدار چندین سند Document را مشخص کنید متد ()findOne بر اساس ترتیب اسناد ذخیره شده اولین سند Document در پایگاه داده را برمی ­گرداند و نمایش می ­دهد.

توجه داشته باشید که نوع­ های دیگری را می ­توان مقدار پارامتر ورودی projection را وارد کرد و مقداردهی کرد. به صورت array projection یا aggregation projection یا projection که در این آموزش به آن توضیح داده نشده است.

مثال­هایی از متد ()findOne در مانگو دی بی

ما در این مثال از Collection کالکشن به نام products استفاده می­ کنیم و در ابتدا اسنادی Document را در این Collection کالکشن اضافه و درج می­ کنیم:

db.products.insertMany([
    { "_id" : 1, "name" : "xPhone", "price" : 799, "releaseDate": ISODate("2011-05-14"), "spec" : { "ram" : 4, "screen" : 6.5, "cpu" : 2.66 },"color":["white","black"],"storage":[64,128,256]},
    { "_id" : 2, "name" : "xTablet", "price" : 899, "releaseDate": ISODate("2011-09-01") , "spec" : { "ram" : 16, "screen" : 9.5, "cpu" : 3.66 },"color":["white","black","purple"],"storage":[128,256,512]},
    { "_id" : 3, "name" : "SmartTablet", "price" : 899, "releaseDate": ISODate("2015-01-14"), "spec" : { "ram" : 12, "screen" : 9.7, "cpu" : 3.66 },"color":["blue"],"storage":[16,64,128]},
    { "_id" : 4, "name" : "SmartPad", "price" : 699, "releaseDate": ISODate("2020-05-14"),"spec" : { "ram" : 8, "screen" : 9.7, "cpu" : 1.66 },"color":["white","orange","gold","gray"],"storage":[128,256,1024]},
    { "_id" : 5, "name" : "SmartPhone", "price" : 599,"releaseDate": ISODate("2022-09-14"), "spec" : { "ram" : 4, "screen" : 5.7, "cpu" : 1.66 },"color":["white","orange","gold","gray"],"storage":[128,256]}
 ])

1) استفاده از متد ()findOne در مانگو دی بی بدون مشخص کردن پارامترها.

با استفاده از متد ()findOne می آییم از Collection کالکشن به نام products دستور زیر را وارد می­ کنیم:

db.products.findOne()

که خروجی دستور  بالا به شکل زیر نمایش داده می ­شود که همان طور که مشخص است میاد اولین Document سند از Collection کالکشن را که به ترتیب درج شده را واکشی و نمایش می­ دهد.

(5 سند در این کالکشن موجود است که با اجرا دستور بالا اولین Document سند از Collection کالکشن را نمایش می­ دهد)

{
  _id: 1,
  name: 'xPhone',
  price: 799,
  releaseDate: ISODate("2011-05-14T00:00:00.000Z"),
  spec: { ram: 4, screen: 6.5, cpu: 2.66 },
  color: [ 'white', 'black' ],
  storage: [ 64, 128, 256 ]
}

توجه داشته باشید حذف و مشخص کردن مقدار پارامتر query نشان­ دهنده این است من نظرم سند خاصی نیست و مانگو دی بی خودش اولین سند Document از Collection کالکشن مربوطه را بازگردانی و نمایش می دهد. و ساختار دستور به شکل زیر خواهد بود.

db.products.findOne({})

2) استفاده از متد ()findOne در مانگو دی بی با مشخص کردن یک فیلتر

در مثال زیر با استفاده از متد ()findOne می­ خواهیم اطلاعات Document سندی که پارامتر id_ آن برابر 2 باشد را پیدا کنیم.

 db.products.findOne({_id:2})

در خروجی دستور بالا تمامی ستون­ های سند با پارامت id_ برابر 2 می باشد را واکشی و نمایش می ­دهد.

{
  _id: 2,
  name: 'xTablet',
  price: 899,
  releaseDate: ISODate("2011-09-01T00:00:00.000Z"),
  spec: { ram: 16, screen: 9.5, cpu: 3.66 },
  color: [ 'white', 'black', 'purple' ],
  storage: [ 128, 256, 512 ]
}

3) استفاده از متد ()findOne در مانگو دی بی با نمایش ستون­های مشخص شده

در مثال زیر ما می­ خواهیم اطلاعات فقط Document سندی که پارامتر id_ برابر 5 باشد را با متد ()findOne بازگردانی و نمایش دهیم با این تفاوت که در این سند فقط می­ خواهیم اطلاعات ستون id_ و name را نمایش دهیم:

db.products.findOne({_id: 5}, {name: 1})

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

{ "_id" : 5, "name" : "SmartPhone" }

همان طور که در خروجی دستور مشخص است در خروجی مانگو دی بی نمایش ستون­ ها، مقدار فیلد id_ را نمایش می ­دهد حتی اگر آن را مشخص نکرده باشید.

برای این که بخواهید در نمایش ستون­ ها، فیلد id_ را در خروجی نمایش ندهید بایستی در پارامتر id_ حتما مقدار آن را برابر 0 قرار دهید که در خروجی نمایش ندهد.

db.products.findOne({ _id: 5 }, {name: 1, _id: 0})

خروجی دستور بالا به شکل زیر نمایش داده می ­شود که با مشخص مقدار id_ برابر 0 در خروجی مقدار فیلد id_ را نمایش نمی ­دهد.

{ "name" : "SmartPhone" }

خلاصه می کنیم

با استفاده از متد ()findOne (بدون مشخص کردن هیچ پارامتر ورودی متد) اطلاعات اولین سند Document در Collection کالکشن مشخص شده را بازگردانی و نمایش می ­دهد.

برای ادامه آموزش مانگو دی‌ بی MongoDB می توانید مقاله آشنایی با دستور find در مانگو دی بی را مطالعه کنید.

محسن زمانی هستم، برنامه نویس و طراح وب ، سئو هم بلدم . به هدف تفریح و سرگرمی این وب سایت رو طراحی کردم تا مطالبی که دوست دارم رو اینجا به اشتراک بزارم.

دیدگاه خود را بنویسید:

آدرس ایمیل شما نمایش داده نخواهد شد.