বর্ণনা
বিদ্যমান ফিল্ডগুলোর একটি উপসেটকে রেফারেন্স করে, অথবা কোনো প্রদত্ত এক্সপ্রেশনের ফলাফলে একটি ফিল্ড অ্যাসাইন করে নতুন ডকুমেন্ট তৈরি করে।
উদাহরণ
Web
const result = await execute(db.pipeline() .collection("books") .select(field("soldBooks").multiply(field("price")).round().as("partialRevenue")) .aggregate(field("partialRevenue").sum().as("totalRevenue")) );
সুইফট
let result = try await db.pipeline() .collection("books") .select([Field("soldBooks").multiply(Field("price")).round().as("partialRevenue")]) .aggregate([Field("partialRevenue").sum().as("totalRevenue")]) .execute()
Kotlin
val result = db.pipeline() .collection("books") .select(Expression.multiply(field("soldBooks"), field("price")).round().alias("partialRevenue")) .aggregate(AggregateFunction.sum("partialRevenue").alias("totalRevenue")) .execute()
Java
Task<Pipeline.Snapshot> result = db.pipeline() .collection("books") .select(Expression.multiply(field("soldBooks"), field("price")).round().alias("partialRevenue")) .aggregate(AggregateFunction.sum("partialRevenue").alias("totalRevenue")) .execute();
পাইথন
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .select( Field.of("soldBooks") .multiply(Field.of("price")) .round() .as_("partialRevenue") ) .aggregate(Field.of("partialRevenue").sum().as_("totalRevenue")) .execute() )
জাভা
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(round(multiply(field("soldBooks"), field("price"))).as("partialRevenue")) .aggregate(sum("partialRevenue").as("totalRevenue")) .execute() .get();
যান
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.Round(firestore.Multiply(firestore.FieldOf("soldBooks"), firestore.FieldOf("price"))).As("partialRevenue"), )). Aggregate(firestore.Accumulators( firestore.Sum("partialRevenue").As("totalRevenue"), )). Execute(ctx)
আচরণ
একটি নির্বাচিত পর্যায়ের অবস্থান
একটি সিলেক্ট স্টেজ কখন ব্যবহার করা যাবে তার উপর কোনো বিধিনিষেধ নেই, কিন্তু সিলেক্ট স্টেজে অন্তর্ভুক্ত নয় এমন কোনো ফিল্ড একটি পাইপলাইনের পরবর্তী স্টেজগুলোতে অ্যাক্সেসযোগ্য হবে না। উদাহরণস্বরূপ, নিম্নলিখিত ডেটাসেট থেকে কানাডার সমস্ত শহরের শুধুমাত্র name এবং location ফিল্ডগুলো নির্বাচন করতে:
নোড.জেএস
await db.collection("cities").doc("SF").set({
name: "San Francisco",
population: 800000,
location: {country: "USA", state: "California"}
});
await db.collection("cities").doc("TO").set({
name: "Toronto",
population: 3000000,
location: {country: "Canada", province: "Ontario"}
});
নিম্নলিখিত পাইপলাইনটি ব্যবহার করা যেতে পারে:
নোড.জেএস
const names = await db.pipeline()
.collection("/cities")
.where(equal(field("location.country"), "Canada"))
.select(stringConcat(field("name"), ", ", field("location.country")).as("name"), "population")
.execute();
যা নিম্নলিখিত নথিগুলি তৈরি করে:
{ name: "Toronto, Canada", population: 3000000 },
তবে, যদি select(...) পর্যায়টি where(...) পর্যায়ের আগে রাখা হয়, যেমন:
নোড.জেএস
const names = await db.pipeline()
.collection("/cities")
.select(stringConcat(field("name"), ",", field("location.country")).as("name"), "population")
.where(equal(field("location.country"), "Canada"))
.execute();
কোনো নথি তৈরি করা হবে না, কারণ where(...) পর্যায়টি কার্যকর হওয়ার আগেই নথি থেকে location.country মুছে ফেলা হয়েছে।
নেস্টেড ফিল্ড নির্বাচন করুন
` select(...) ` ধাপটি ম্যাপ এবং অ্যারে উভয় থেকেই নেস্টেড ফিল্ড নির্বাচন করতে ব্যবহার করা যায়। উদাহরণস্বরূপ, নিম্নলিখিত ডকুমেন্টগুলো থেকে নেস্টেড country ফিল্ড এবং landmarks অ্যারের প্রথম এন্ট্রি নির্বাচন করতে:
নোড.জেএস
await db.collection("cities").doc("SF").set({
name: "San Francisco",
population: 800000,
location: { country: "USA", state: "California" },
landmarks: [ "Golden Gate Bridge", "Alcatraz" ]
});
await db.collection("cities").doc("TO").set({
name: "Toronto",
population: 3000000,
province: "ON",
location: { country: "Canada", province: "Ontario" },
landmarks: [ "CN Tower", "Casa Loma" ]
});
await db.collection("cities").doc("AT").set({
name: "Atlantis",
population: null
});
নিম্নলিখিত পাইপলাইনটি ব্যবহার করা যেতে পারে:
নোড.জেএস
const locations = await db.pipeline()
.collection("/cities")
.select(
field("name").as("city"),
field("location.country").as("country"),
field("landmarks").offset(0).as("topLandmark"))
.execute();
যা নিম্নলিখিত নথিগুলি তৈরি করে:
{ city: "San Francisco", country: "USA", topLandmark: "Golden Gate Bridge" },
{ city: "Toronto", country: "Canada", topLandmark: "CN Tower" },
{ city: "Atlantis" }
যদি কোনো নেস্টেড ম্যাপ ভ্যালু বা অ্যারে ভ্যালু বিদ্যমান না থাকে, তবে তা চূড়ান্ত ডকুমেন্টে অন্তর্ভুক্ত করা হয় না। সিলেক্ট পর্যায়ে অ্যারে এবং ম্যাপ অ্যাক্সেস যথাক্রমে offset(...) এবং get_field(...) ফাংশনগুলোর মতোই কাজ করে।
নেস্টেড ফিল্ডগুলি বরাদ্দ করুন
একটি এক্সপ্রেশনের ফলাফল একটি নেস্টেড ফিল্ডেও অ্যাসাইন করা যেতে পারে, যার ফলে select(...) পর্যায়টি পূর্ববর্তী পর্যায় থেকে নেস্টেড ফিল্ডগুলির একটি উপসেট রিটার্ন করতে পারে। উদাহরণস্বরূপ, ডকুমেন্টের মূল কাঠামো অক্ষুণ্ণ রেখে শুধুমাত্র city ও state তথ্য রিটার্ন করা নিশ্চিত করতে নিম্নলিখিতটি ব্যবহার করা যেতে পারে:
নোড.জেএস
const results = await db.pipeline()
.collection("/users")
.addFields(
field("__name__"),
field("address.city").as("address.city"),
field("address.state").as("address.state"))
.execute();