মুছে ফেলা

delete() হলো ডেটা ম্যানিপুলেশন ল্যাঙ্গুয়েজ (DML)-এর একটি স্টেজ, যা কোয়েরির ফলাফলের উপর ভিত্তি করে ডকুমেন্ট মুছে ফেলার সুযোগ দেয়। এই স্টেজটি একটি কোয়েরির শেষে যুক্ত করা যায় এবং এটি পূর্ববর্তী স্টেজের __name__ ফিল্ড দ্বারা রেফারেন্সকৃত সমস্ত ডকুমেন্ট মুছে ফেলবে।

উদাহরণ

উদাহরণস্বরূপ, নিম্নলিখিত কোয়েরিটি সেই সমস্ত users ডকুমেন্ট মুছে দেয় যাদের address.users মান USA এবং __create_time__ মান ১০ দিনের কম:

নোড.জেএস
const pipeline = db.pipeline()
  .collectionGroup("users")
  .where(field("address.country").equal("USA"))
  .where(field("__create_time__").timestampAdd("day", 10).lessThan(currentTimestamp()))
  .delete();
await pipeline.execute();
পাইথন
from google.cloud.firestore_v1.pipeline_expressions import CurrentTimestamp, Field

snapshot = (
    client.pipeline()
    .collection_group("users")
    .where(Field.of("address.country").equal("USA"))
    .where(
        Field.of("__create_time__")
        .timestamp_add("day", 10)
        .less_than(CurrentTimestamp())
    )
    .delete()
    .execute()
)
জাভা
Pipeline.Snapshot deleteResults = firestore.pipeline()
  .collectionGroup("users")
  .where(field("address.country").equal("USA"))
  .where(field("__create_time__").add(constant(10)).lessThan(currentTimestamp()))
  .delete()
  .execute().get();
যান
snapshot := client.Pipeline().
	CollectionGroup("users").
	Where(firestore.FieldOf("address.country").Equal("USA")).
	Where(firestore.FieldOf("__create_time__").Add(firestore.ConstantOf(10)).LessThan(firestore.CurrentTimestamp())).
	Delete().
	Execute(ctx)

আচরণ

প্রতিক্রিয়া

delete() পর্যায়টি সর্বদা { documents_modified: 28L } এর মতো একটি একক ডকুমেন্ট তৈরি করে, যা বর্ণনা করে কতগুলি ডকুমেন্ট মুছে ফেলা হয়েছে।

সম্পূর্ণ সংগ্রহ মুছে ফেলুন

একটি কালেকশন থেকে সমস্ত ডকুমেন্ট মুছে ফেলার জন্য, ইনপুট স্টেজে delete() যুক্ত করতে হয়, যেমন:

নোড.জেএস

const results = await db.pipeline()
  .collection("/users")
  .delete()
  .execute();

চূড়ান্ত delete() ফাংশনের আগে where(...) ধাপটি যেন শুধুমাত্র প্রত্যাশিত ডকুমেন্টগুলোকেই আপডেট করার জন্য সঠিকভাবে সীমাবদ্ধ রাখে, তা নিশ্চিত করতে হবে। শুধুমাত্র উদ্দিষ্ট ডকুমেন্টগুলোই অপসারিত হচ্ছে কিনা, তা যাচাই করার জন্য প্রথমে চূড়ান্ত delete() ধাপটি ছাড়া কোয়েরিটি চালানো একটি ভালো অভ্যাস।

চূড়ান্ত পর্যায়

delete() পর্যায়টি অবশ্যই একটি পাইপলাইনের শেষে থাকতে হবে, এর পরে আর কোনো পর্যায় যোগ করা যাবে না।

সবগুলো মুছে ফেলুন

ডিফল্টরূপে delete() ধাপটি পূর্ববর্তী ধাপ দ্বারা উল্লেখিত সমস্ত ডকুমেন্ট মুছে ফেলবে। যদি আপনি কাজের পরিমাণ সীমিত করতে চান, অথবা আপনি জানেন যে ফিল্টার শর্তগুলি ঠিক একটি ডকুমেন্টের সাথে মেলে, তাহলে মোট কাজ সীমিত করার জন্য চূড়ান্ত delete() এর আগে একটি limit(1) যোগ করা যেতে পারে।

ক্রস সংগ্রহ মিউটেশন

চূড়ান্ত delete() ধাপটি __name__ দ্বারা নির্দেশিত যেকোনো ডকুমেন্টে পরিবর্তনসমূহ প্রয়োগ করবে (যদি সমস্ত প্রয়োজনীয় প্রমাণীকরণ প্রদান করা হয়)। এর মধ্যে একই অনুরোধের অংশ হিসেবে একাধিক ভিন্ন কালেকশন বা কালেকশন গ্রুপ থেকে ডকুমেন্ট মুছে ফেলাও অন্তর্ভুক্ত।

__name__ আবশ্যক

delete() ধাপটির জন্য পূর্ববর্তী ধাপে একটি __name__ ফিল্ড থাকা আবশ্যক, যেটিতে অপসারণ করার জন্য একটি ডকুমেন্ট রেফারেন্স থাকবে। এটি করতে ব্যর্থ হলে একটি রানটাইম ত্রুটি ঘটবে, এবং কোনো ট্রানজ্যাকশনের বাইরে চালানো হলে আংশিক সাফল্য আসতে পারে।

বেশিরভাগ ইনপুট স্টেজে, যেমন collection(...) , collection_group(...) , database(...) , এবং documents(...) , ডিফল্টভাবে __name__ ফিল্ডটি অন্তর্ভুক্ত থাকে, তাই এটি কেবল তখনই প্রাসঙ্গিক যখন কোনো প্রোজেকশন (যেমন select(...) ) ব্যবহার করা হয় অথবা ডকুমেন্টগুলোর উপর কোনো ট্রান্সফরমেশন (যেমন aggregate(...) ) করা হয়।

প্রতিক্রিয়াটিতে পরিবর্তিত ডকুমেন্টের সংখ্যার একটি সারসংক্ষেপ অন্তর্ভুক্ত থাকে। উদাহরণস্বরূপ, নিম্নলিখিত প্রতিক্রিয়াটি নিশ্চিত করে যে পাইপলাইনটি তিনটি ডকুমেন্ট পরিবর্তন করেছে:

{documents_modified: 3L}

সীমাবদ্ধতা

  • DML পর্যায়গুলো Cloud Firestore Security Rules সমর্থন করে না। Cloud Firestore Security Rules মাধ্যমে DML অপারেশনের প্রচেষ্টা প্রত্যাখ্যান করা হয়।

  • এই ফিচারটির প্রিভিউ চলাকালীন, আপনি কোনো ট্রানজ্যাকশনের মধ্যে DML স্টেজগুলো চালাতে পারবেন না। কনসিস্টেন্সি আচরণ সম্পর্কে আরও তথ্যের জন্য কনসিস্টেন্সি দেখুন।

  • যদি DML ধাপের পূর্ববর্তী ধাপে একই __name__ সহ একাধিক ডকুমেন্ট তৈরি হয়, তবে প্রতিটি ইনস্ট্যান্স প্রসেস করা হয়। update(...) এর ক্ষেত্রে, এর অর্থ হলো একই টার্গেট ডকুমেন্ট একাধিকবার পরিবর্তিত হতে পারে। delete(...) এর ক্ষেত্রে, প্রথমটির পরের প্রচেষ্টাগুলো নিষ্ক্রিয় থাকবে।