এই অধ্যায়টি Golang MongoDB ডকুমেন্ট ক্যুয়ারি ব্যবহার সম্পর্কে পরিচিতি দেয়।
প্রস্তুতকরণ টিউটোরিয়াল
প্রস্তাবনা: যদি আপনি MongoDB ক্যুয়ারি সিনট্যাক্সে অপরিচিত হন, তাহলে প্রথমে মঙ্গোডিবি টিউটোরিয়াল পড়ুন। Golang এ MongoDB চালানোর জন্য ব্যবহৃত অভিব্যক্তি সিনট্যাক্সটি একই।
পরীক্ষার ডেটা প্রস্তুতি
coll
কালেকশনে একটি ডকুমেন্ট ডেটা ব্যাচ প্রবেশ করান।
docs := []interface{}{
bson.D{
{"item", "journal"},
{"qty", 25},
{"size", bson.D{
{"h", 14},
{"w", 21},
{"uom", "cm"},
}},
{"status", "A"},
},
// ... (অন্যান্য ডকুমেন্ট ডেটা)
}
result, err := coll.InsertMany(context.Background(), docs)
সমস্ত ডকুমেন্ট কুয়েরি
cursor, err := coll.Find(
context.Background(),
bson.D{}, // খালি কিউয়ারি শর্ত নির্ধারণ করুন
)
সমানতা অনুসন্ধান শর্ত
SQL এর সমানতা ম্যাচ এর মত।
cursor, err := coll.Find(
context.Background(),
bson.D{{"status", "D"}}, // সমতুল্য শর্ত: status = D
)
in
কুয়েরি অপারেটর
SQL এর in
কুয়েরির মত।
cursor, err := coll.Find(
context.Background(),
bson.D{{"status", bson.D{{"$in", bson.A{"A", "D"}}}}}) // সমতুল্য শর্ত: status in ('A', 'D')
and
কুয়েরি শর্ত
SQL এর and
লজিক্যাল অভিব্যক্তির মত।
cursor, err := coll.Find(
context.Background(),
bson.D{ // সমতুল্য শর্ত: status='A' এবং qty < 30
{"status", "A"},
{"qty", bson.D{{"$lt", 30}}},
})
or
কুয়েরি শর্ত
SQL এর or
লজিক্যাল অভিব্যক্তির মত।
cursor, err := coll.Find(
context.Background(),
bson.D{ // সমতুল্য শর্ত: status = "A" OR qty < 30
{"$or", // $or অপারেটর ব্যবহার করা হয়েছে
bson.A{ // bson.A অ্যারে টাইপ ডিফাইনেশন ব্যবহার করা হয়েছে
bson.D{{"status", "A"}},
bson.D{{"qty", bson.D{{"$lt", 30}}}},
}},
})
একক অনুসন্ধান উদাহরণ
উদাহরণ 1
// নাম যার জন্য ডকুমেন্ট অনুসন্ধান করুন 'বব'
cursor, err := coll.Find(context.TODO(), bson.D{{"name", "Bob"}}, opts)
if err != nil {
log.Fatal(err)
}
// একটি bson.M ধরনের ডকুমেন্টের একটি অ্যারে ডিফাইন করুন, যেখানে bson.M একটি কী-মান ডেটা স্ট্রাকচারের মতো একটি ম্যাপ
var results []bson.M
// সমস্ত অনুসন্ধানের জন্য All ফাংশন ব্যবহার করুন এবং ফলাফলগুলি সংরক্ষণ করতে results ভেরিয়েবলে ফলাফলগুলিকে সংরক্ষণ করুন।
if err = cursor.All(context.TODO(), &results); err != nil {
log.Fatal(err)
}
// ফলাফলগুলির অ্যারে অনুসন্ধান করুন
for _, result := range results {
fmt.Println(result)
}
ব্যাখ্যা: উদাহরণটি ব্যবহার করে bson.M ধরনের ডকুমেন্ট ডেটা সংরক্ষণ করতে ব্যবহার করে। আপনি একটি স্ট্রাক্চারের উপরে কাস্টমাইজ করে একটি স্ট্রাক্চার প্রকার কাস্টমাইজ করতে পারেন যত যেতে নামটির সাথে মিলছে।
উদাহরণ 2
// একটি স্ট্রাক্চার ধরনের ভেরিয়েবল ডিফাইন করুন যাতে অনুসন্ধান ফলাফল সংরক্ষণ করা যায়
var result struct {
Value float64
}
// ডকুমেন্ট অনুসন্ধান শর্ত নাম = 'পাই' ধরুন
filter := bson.D{{"name", "pi"}}
// একটি সংদর্ভ অবজেক্ট তৈরি করুন এবং অনুসন্ধান সময় সীমা 5 সেকেন্ডে সেট করুন
ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
// শর্ত ভিত্তিক একক ডাটা অনুসন্ধান করুন এবং প্রদান ফাংশন ব্যবহার করে ফলাফলটি প্রাপ্ত করার জন্য ব্যবহার করুন
err = collection.FindOne(ctx, filter).Decode(&result)
// অনুসন্ধান ত্রুটি পরীক্ষা করুন
if err == mongo.ErrNoDocuments {
// ডকুমেন্ট খুঁজে পাওয়া যায়নি
fmt.Println("ডকুমেন্ট অস্তিত্ব নেই")
} else if err != nil {
log.Fatal(err)
}
// অন্যান্য হ্যান্ডলিং
প্রস্তাবনা: আরও সুদৃঢ় MongoDB কুয়েরি অভিব্যক্তি সিনট্যাক্সের জন্য, অনুগ্রহ করে মঙ্গোডিবি টিউটোরিয়ালে দেখুন।