Cloud Firestore-এর শক্তিশালী কোয়েরি ফাংশনালিটি ব্যবহার করে আপনি কোনও কালেকশন বা কালেকশন গ্রুপ থেকে
নির্দিষ্ট ডকুমেন্ট খুঁজে পেতে পারেন। get() বা addSnapshotListener()-এর সাথেও এই কোয়েরিগুলি ব্যবহার করা যেতে পারে, যেমনটি ডেটা পান এবং রিয়েল-টাইম আপডেট পান-এ বর্ণনা করা হয়েছে।
উদাহরণ ডেটা
শুরু করতে, শহর সম্পর্কে কিছু ডেটা লিখুন যাতে আমরা এটি আবার পড়ার বিভিন্ন উপায় দেখতে পারি:
Web
import { collection, doc, setDoc } from "firebase/firestore"; const citiesRef = collection(db, "cities"); await setDoc(doc(citiesRef, "SF"), { name: "San Francisco", state: "CA", country: "USA", capital: false, population: 860000, regions: ["west_coast", "norcal"] }); await setDoc(doc(citiesRef, "LA"), { name: "Los Angeles", state: "CA", country: "USA", capital: false, population: 3900000, regions: ["west_coast", "socal"] }); await setDoc(doc(citiesRef, "DC"), { name: "Washington, D.C.", state: null, country: "USA", capital: true, population: 680000, regions: ["east_coast"] }); await setDoc(doc(citiesRef, "TOK"), { name: "Tokyo", state: null, country: "Japan", capital: true, population: 9000000, regions: ["kanto", "honshu"] }); await setDoc(doc(citiesRef, "BJ"), { name: "Beijing", state: null, country: "China", capital: true, population: 21500000, regions: ["jingjinji", "hebei"] });
Web
var citiesRef = db.collection("cities"); citiesRef.doc("SF").set({ name: "San Francisco", state: "CA", country: "USA", capital: false, population: 860000, regions: ["west_coast", "norcal"] }); citiesRef.doc("LA").set({ name: "Los Angeles", state: "CA", country: "USA", capital: false, population: 3900000, regions: ["west_coast", "socal"] }); citiesRef.doc("DC").set({ name: "Washington, D.C.", state: null, country: "USA", capital: true, population: 680000, regions: ["east_coast"] }); citiesRef.doc("TOK").set({ name: "Tokyo", state: null, country: "Japan", capital: true, population: 9000000, regions: ["kanto", "honshu"] }); citiesRef.doc("BJ").set({ name: "Beijing", state: null, country: "China", capital: true, population: 21500000, regions: ["jingjinji", "hebei"] });
Swift
let citiesRef = db.collection("cities") citiesRef.document("SF").setData([ "name": "San Francisco", "state": "CA", "country": "USA", "capital": false, "population": 860000, "regions": ["west_coast", "norcal"] ]) citiesRef.document("LA").setData([ "name": "Los Angeles", "state": "CA", "country": "USA", "capital": false, "population": 3900000, "regions": ["west_coast", "socal"] ]) citiesRef.document("DC").setData([ "name": "Washington D.C.", "country": "USA", "capital": true, "population": 680000, "regions": ["east_coast"] ]) citiesRef.document("TOK").setData([ "name": "Tokyo", "country": "Japan", "capital": true, "population": 9000000, "regions": ["kanto", "honshu"] ]) citiesRef.document("BJ").setData([ "name": "Beijing", "country": "China", "capital": true, "population": 21500000, "regions": ["jingjinji", "hebei"] ])
Objective-C
FIRCollectionReference *citiesRef = [self.db collectionWithPath:@"cities"]; [[citiesRef documentWithPath:@"SF"] setData:@{ @"name": @"San Francisco", @"state": @"CA", @"country": @"USA", @"capital": @(NO), @"population": @860000, @"regions": @[@"west_coast", @"norcal"] }]; [[citiesRef documentWithPath:@"LA"] setData:@{ @"name": @"Los Angeles", @"state": @"CA", @"country": @"USA", @"capital": @(NO), @"population": @3900000, @"regions": @[@"west_coast", @"socal"] }]; [[citiesRef documentWithPath:@"DC"] setData:@{ @"name": @"Washington D.C.", @"country": @"USA", @"capital": @(YES), @"population": @680000, @"regions": @[@"east_coast"] }]; [[citiesRef documentWithPath:@"TOK"] setData:@{ @"name": @"Tokyo", @"country": @"Japan", @"capital": @(YES), @"population": @9000000, @"regions": @[@"kanto", @"honshu"] }]; [[citiesRef documentWithPath:@"BJ"] setData:@{ @"name": @"Beijing", @"country": @"China", @"capital": @(YES), @"population": @21500000, @"regions": @[@"jingjinji", @"hebei"] }];
Kotlin
val cities = db.collection("cities") val data1 = hashMapOf( "name" to "San Francisco", "state" to "CA", "country" to "USA", "capital" to false, "population" to 860000, "regions" to listOf("west_coast", "norcal"), ) cities.document("SF").set(data1) val data2 = hashMapOf( "name" to "Los Angeles", "state" to "CA", "country" to "USA", "capital" to false, "population" to 3900000, "regions" to listOf("west_coast", "socal"), ) cities.document("LA").set(data2) val data3 = hashMapOf( "name" to "Washington D.C.", "state" to null, "country" to "USA", "capital" to true, "population" to 680000, "regions" to listOf("east_coast"), ) cities.document("DC").set(data3) val data4 = hashMapOf( "name" to "Tokyo", "state" to null, "country" to "Japan", "capital" to true, "population" to 9000000, "regions" to listOf("kanto", "honshu"), ) cities.document("TOK").set(data4) val data5 = hashMapOf( "name" to "Beijing", "state" to null, "country" to "China", "capital" to true, "population" to 21500000, "regions" to listOf("jingjinji", "hebei"), ) cities.document("BJ").set(data5)
Java
CollectionReference cities = db.collection("cities"); Map<String, Object> data1 = new HashMap<>(); data1.put("name", "San Francisco"); data1.put("state", "CA"); data1.put("country", "USA"); data1.put("capital", false); data1.put("population", 860000); data1.put("regions", Arrays.asList("west_coast", "norcal")); cities.document("SF").set(data1); Map<String, Object> data2 = new HashMap<>(); data2.put("name", "Los Angeles"); data2.put("state", "CA"); data2.put("country", "USA"); data2.put("capital", false); data2.put("population", 3900000); data2.put("regions", Arrays.asList("west_coast", "socal")); cities.document("LA").set(data2); Map<String, Object> data3 = new HashMap<>(); data3.put("name", "Washington D.C."); data3.put("state", null); data3.put("country", "USA"); data3.put("capital", true); data3.put("population", 680000); data3.put("regions", Arrays.asList("east_coast")); cities.document("DC").set(data3); Map<String, Object> data4 = new HashMap<>(); data4.put("name", "Tokyo"); data4.put("state", null); data4.put("country", "Japan"); data4.put("capital", true); data4.put("population", 9000000); data4.put("regions", Arrays.asList("kanto", "honshu")); cities.document("TOK").set(data4); Map<String, Object> data5 = new HashMap<>(); data5.put("name", "Beijing"); data5.put("state", null); data5.put("country", "China"); data5.put("capital", true); data5.put("population", 21500000); data5.put("regions", Arrays.asList("jingjinji", "hebei")); cities.document("BJ").set(data5);
Dart
final cities = db.collection("cities"); final data1 = <String, dynamic>{ "name": "San Francisco", "state": "CA", "country": "USA", "capital": false, "population": 860000, "regions": ["west_coast", "norcal"] }; cities.doc("SF").set(data1); final data2 = <String, dynamic>{ "name": "Los Angeles", "state": "CA", "country": "USA", "capital": false, "population": 3900000, "regions": ["west_coast", "socal"], }; cities.doc("LA").set(data2); final data3 = <String, dynamic>{ "name": "Washington D.C.", "state": null, "country": "USA", "capital": true, "population": 680000, "regions": ["east_coast"] }; cities.doc("DC").set(data3); final data4 = <String, dynamic>{ "name": "Tokyo", "state": null, "country": "Japan", "capital": true, "population": 9000000, "regions": ["kanto", "honshu"] }; cities.doc("TOK").set(data4); final data5 = <String, dynamic>{ "name": "Beijing", "state": null, "country": "China", "capital": true, "population": 21500000, "regions": ["jingjinji", "hebei"], }; cities.doc("BJ").set(data5);
জাভা
Python
class City: def __init__(self, name, state, country, capital=False, population=0, regions=[]): self.name = name self.state = state self.country = country self.capital = capital self.population = population self.regions = regions @staticmethod def from_dict(source): # ... def to_dict(self): # ... def __repr__(self): return f"City(\ name={self.name}, \ country={self.country}, \ population={self.population}, \ capital={self.capital}, \ regions={self.regions}\ )"
cities_ref = db.collection("cities") cities_ref.document("BJ").set( City("Beijing", None, "China", True, 21500000, ["hebei"]).to_dict() ) cities_ref.document("SF").set( City( "San Francisco", "CA", "USA", False, 860000, ["west_coast", "norcal"] ).to_dict() ) cities_ref.document("LA").set( City( "Los Angeles", "CA", "USA", False, 3900000, ["west_coast", "socal"] ).to_dict() ) cities_ref.document("DC").set( City("Washington D.C.", None, "USA", True, 680000, ["east_coast"]).to_dict() ) cities_ref.document("TOK").set( City("Tokyo", None, "Japan", True, 9000000, ["kanto", "honshu"]).to_dict() )
Python
class City: def __init__(self, name, state, country, capital=False, population=0, regions=[]): self.name = name self.state = state self.country = country self.capital = capital self.population = population self.regions = regions @staticmethod def from_dict(source): # ... def to_dict(self): # ... def __repr__(self): return f"City(\ name={self.name}, \ country={self.country}, \ population={self.population}, \ capital={self.capital}, \ regions={self.regions}\ )"
cities_ref = db.collection("cities") await cities_ref.document("BJ").set( City("Beijing", None, "China", True, 21500000, ["hebei"]).to_dict() ) await cities_ref.document("SF").set( City( "San Francisco", "CA", "USA", False, 860000, ["west_coast", "norcal"] ).to_dict() ) await cities_ref.document("LA").set( City( "Los Angeles", "CA", "USA", False, 3900000, ["west_coast", "socal"] ).to_dict() ) await cities_ref.document("DC").set( City("Washington D.C.", None, "USA", True, 680000, ["east_coast"]).to_dict() ) await cities_ref.document("TOK").set( City("Tokyo", None, "Japan", True, 9000000, ["kanto", "honshu"]).to_dict() )
C++
CollectionReference cities = db->Collection("cities"); cities.Document("SF").Set({ {"name", FieldValue::String("San Francisco")}, {"state", FieldValue::String("CA")}, {"country", FieldValue::String("USA")}, {"capital", FieldValue::Boolean(false)}, {"population", FieldValue::Integer(860000)}, {"regions", FieldValue::Array({FieldValue::String("west_coast"), FieldValue::String("norcal")})}, }); cities.Document("LA").Set({ {"name", FieldValue::String("Los Angeles")}, {"state", FieldValue::String("CA")}, {"country", FieldValue::String("USA")}, {"capital", FieldValue::Boolean(false)}, {"population", FieldValue::Integer(3900000)}, {"regions", FieldValue::Array({FieldValue::String("west_coast"), FieldValue::String("socal")})}, }); cities.Document("DC").Set({ {"name", FieldValue::String("Washington D.C.")}, {"state", FieldValue::Null()}, {"country", FieldValue::String("USA")}, {"capital", FieldValue::Boolean(true)}, {"population", FieldValue::Integer(680000)}, {"regions", FieldValue::Array({FieldValue::String("east_coast")})}, }); cities.Document("TOK").Set({ {"name", FieldValue::String("Tokyo")}, {"state", FieldValue::Null()}, {"country", FieldValue::String("Japan")}, {"capital", FieldValue::Boolean(true)}, {"population", FieldValue::Integer(9000000)}, {"regions", FieldValue::Array({FieldValue::String("kanto"), FieldValue::String("honshu")})}, }); cities.Document("BJ").Set({ {"name", FieldValue::String("Beijing")}, {"state", FieldValue::Null()}, {"country", FieldValue::String("China")}, {"capital", FieldValue::Boolean(true)}, {"population", FieldValue::Integer(21500000)}, {"regions", FieldValue::Array({FieldValue::String("jingjinji"), FieldValue::String("hebei")})}, });
Node.js
Go
PHP
Unity
CollectionReference citiesRef = db.Collection("cities"); citiesRef.Document("SF").SetAsync(new Dictionary<string, object>(){ { "Name", "San Francisco" }, { "State", "CA" }, { "Country", "USA" }, { "Capital", false }, { "Population", 860000 }, { "Regions", new ArrayList{"west_coast", "norcal"} } }); citiesRef.Document("LA").SetAsync(new Dictionary<string, object>(){ { "Name", "Los Angeles" }, { "State", "CA" }, { "Country", "USA" }, { "Capital", false }, { "Population", 3900000 }, { "Regions", new ArrayList{"west_coast", "socal"} } }); citiesRef.Document("DC").SetAsync(new Dictionary<string, object>(){ { "Name", "Washington D.C." }, { "State", null }, { "Country", "USA" }, { "Capital", true }, { "Population", 680000 }, { "Regions", new ArrayList{"east_coast"} } }); citiesRef.Document("TOK").SetAsync(new Dictionary<string, object>(){ { "Name", "Tokyo" }, { "State", null }, { "Country", "Japan" }, { "Capital", true }, { "Population", 9000000 }, { "Regions", new ArrayList{"kanto", "honshu"} } }); citiesRef.Document("BJ").SetAsync(new Dictionary<string, object>(){ { "Name", "Beijing" }, { "State", null }, { "Country", "China" }, { "Capital", true }, { "Population", 21500000 }, { "Regions", new ArrayList{"jingjinji", "hebei"} } });
C#
Ruby
সহজ কোয়েরি
নিম্নলিখিত কোয়েরি CA রাজ্যের সব শহরের নাম দেখায়:
Web
// Create a reference to the cities collection import { collection, query, where } from "firebase/firestore"; const citiesRef = collection(db, "cities"); // Create a query against the collection. const q = query(citiesRef, where("state", "==", "CA"));
Web
// Create a reference to the cities collection var citiesRef = db.collection("cities"); // Create a query against the collection. var query = citiesRef.where("state", "==", "CA");
Swift
// Create a reference to the cities collection let citiesRef = db.collection("cities") // Create a query against the collection. let query = citiesRef.whereField("state", isEqualTo: "CA")
Objective-C
// Create a reference to the cities collection FIRCollectionReference *citiesRef = [self.db collectionWithPath:@"cities"]; // Create a query against the collection. FIRQuery *query = [citiesRef queryWhereField:@"state" isEqualTo:@"CA"];
Kotlin
// Create a reference to the cities collection val citiesRef = db.collection("cities") // Create a query against the collection. val query = citiesRef.whereEqualTo("state", "CA")
Java
// Create a reference to the cities collection CollectionReference citiesRef = db.collection("cities"); // Create a query against the collection. Query query = citiesRef.whereEqualTo("state", "CA");
Dart
// Create a reference to the cities collection final citiesRef = db.collection("cities"); // Create a query against the collection. final query = citiesRef.where("state", isEqualTo: "CA");
জাভা
Python
Python
C++
CollectionReference cities_ref = db->Collection("cities"); // Create a query against the collection. Query query_ca = cities_ref.WhereEqualTo("state", FieldValue::String("CA"));
Node.js
Go
PHP
Unity
CollectionReference citiesRef = db.Collection("cities"); Query query = citiesRef.WhereEqualTo("State", "CA"); query.GetSnapshotAsync().ContinueWithOnMainThread((querySnapshotTask) => { foreach (DocumentSnapshot documentSnapshot in querySnapshotTask.Result.Documents) { Debug.Log(String.Format("Document {0} returned by query State=CA", documentSnapshot.Id)); } });
C#
Ruby
নিম্নলিখিত কোয়েরি সব রাজধানী শহরের নাম দেখায়:
Web
import { collection, query, where } from "firebase/firestore"; const citiesRef = collection(db, "cities"); const q = query(citiesRef, where("capital", "==", true));
Web
var citiesRef = db.collection("cities"); var query = citiesRef.where("capital", "==", true);
Swift
let capitalCities = db.collection("cities").whereField("capital", isEqualTo: true)
Objective-C
FIRQuery *capitalCities = [[self.db collectionWithPath:@"cities"] queryWhereField:@"capital" isEqualTo:@YES];
Kotlin
val capitalCities = db.collection("cities").whereEqualTo("capital", true)
Java
Query capitalCities = db.collection("cities").whereEqualTo("capital", true);
Dart
final capitalcities = db.collection("cities").where("capital", isEqualTo: true);
জাভা
Python
Python
C++
Query capital_cities = db->Collection("cities").WhereEqualTo( "capital", FieldValue::Boolean(true));
Node.js
Go
PHP
Unity
CollectionReference citiesRef = db.Collection("cities"); Query query = citiesRef.WhereEqualTo("Capital", true); query.GetSnapshotAsync().ContinueWithOnMainThread((querySnapshotTask) => { foreach (DocumentSnapshot documentSnapshot in querySnapshotTask.Result.Documents) { Debug.Log(String.Format("Document {0} returned by query Capital=true", documentSnapshot.Id)); } });
C#
Ruby
কোয়েরি এক্সিকিউট করা
কোয়েরি অবজেক্ট তৈরি করার পরে, ফলাফল পেতে get() ফাংশন ব্যবহার করুন:
Web
import { collection, query, where, getDocs } from "firebase/firestore"; const q = query(collection(db, "cities"), where("capital", "==", true)); const querySnapshot = await getDocs(q); querySnapshot.forEach((doc) => { // doc.data() is never undefined for query doc snapshots console.log(doc.id, " => ", doc.data()); });
Web
db.collection("cities").where("capital", "==", true) .get() .then((querySnapshot) => { querySnapshot.forEach((doc) => { // doc.data() is never undefined for query doc snapshots console.log(doc.id, " => ", doc.data()); }); }) .catch((error) => { console.log("Error getting documents: ", error); });
Swift
do { let querySnapshot = try await db.collection("cities").whereField("capital", isEqualTo: true) .getDocuments() for document in querySnapshot.documents { print("\(document.documentID) => \(document.data())") } } catch { print("Error getting documents: \(error)") }
Objective-C
[[[self.db collectionWithPath:@"cities"] queryWhereField:@"capital" isEqualTo:@(YES)] getDocumentsWithCompletion:^(FIRQuerySnapshot *snapshot, NSError *error) { if (error != nil) { NSLog(@"Error getting documents: %@", error); } else { for (FIRDocumentSnapshot *document in snapshot.documents) { NSLog(@"%@ => %@", document.documentID, document.data); } } }];
Kotlin
db.collection("cities") .whereEqualTo("capital", true) .get() .addOnSuccessListener { documents -> for (document in documents) { Log.d(TAG, "${document.id} => ${document.data}") } } .addOnFailureListener { exception -> Log.w(TAG, "Error getting documents: ", exception) }
Java
db.collection("cities") .whereEqualTo("capital", true) .get() .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() { @Override public void onComplete(@NonNull Task<QuerySnapshot> task) { if (task.isSuccessful()) { for (QueryDocumentSnapshot document : task.getResult()) { Log.d(TAG, document.getId() + " => " + document.getData()); } } else { Log.d(TAG, "Error getting documents: ", task.getException()); } } });
Dart
db.collection("cities").where("capital", isEqualTo: true).get().then( (querySnapshot) { print("Successfully completed"); for (var docSnapshot in querySnapshot.docs) { print('${docSnapshot.id} => ${docSnapshot.data()}'); } }, onError: (e) => print("Error completing: $e"), );
জাভা
Python
Python
C++
db->Collection("cities") .WhereEqualTo("capital", FieldValue::Boolean(true)) .Get() .OnCompletion([](const Future<QuerySnapshot>& future) { if (future.error() == Error::kErrorOk) { for (const DocumentSnapshot& document : future.result()->documents()) { std::cout << document << std::endl; } } else { std::cout << "Error getting documents: " << future.error_message() << std::endl; } });
Node.js
Go
PHP
PHP
Cloud Firestore ক্লায়েন্ট ইনস্টল ও তৈরি করা সম্পর্কে আরও জানতে, Cloud Firestore ক্লায়েন্ট লাইব্রেরি দেখুন।
Unity
Query capitalQuery = db.Collection("cities").WhereEqualTo("Capital", true); capitalQuery.GetSnapshotAsync().ContinueWithOnMainThread(task => { QuerySnapshot capitalQuerySnapshot = task.Result; foreach (DocumentSnapshot documentSnapshot in capitalQuerySnapshot.Documents) { Debug.Log(String.Format("Document data for {0} document:", documentSnapshot.Id)); Dictionary<string, object> city = documentSnapshot.ToDictionary(); foreach (KeyValuePair<string, object> pair in city) { Debug.Log(String.Format("{0}: {1}", pair.Key, pair.Value)); } // Newline to separate entries Debug.Log(""); }; });
C#
Ruby
কোয়েরির ফলাফল পাওয়ার ব্যাপারে আরও তথ্যের জন্য ডেটা পান বিকল্প দেখুন। এছাড়াও, আপনি বর্তমান ফলাফল পেতে এবং ভবিষ্যতের আপডেট শুনতে কোনও কোয়েরিতে লিসেনার যোগ করতে পারবেন।
কোয়েরি অপারেটর
where() পদ্ধতিতে তিনটি প্যারামিটার থাকে: ফিল্টার করার জন্য একটি ফিল্ড, একটি তুলনামূলক
অপারেটর এবং একটি ভ্যালু। কোর অপারেশন নিম্নলিখিত তুলনাকারী অপারেটর
সমর্থন করে:
<-এর থেকে কম<=-এর থেকে কম বা সমান==-এর সমান>এর থেকে বেশি>=এর থেকে বড় বা এর সমান!=এর সমান নয়array-containsarray-contains-anyinnot-in
যেমন:
Web
const stateQuery = query(citiesRef, where("state", "==", "CA")); const populationQuery = query(citiesRef, where("population", "<", 100000)); const nameQuery = query(citiesRef, where("name", ">=", "San Francisco"));
Web
const stateQuery = citiesRef.where("state", "==", "CA"); const populationQuery = citiesRef.where("population", "<", 100000); const nameQuery = citiesRef.where("name", ">=", "San Francisco");
Swift
let stateQuery = citiesRef.whereField("state", isEqualTo: "CA") let populationQuery = citiesRef.whereField("population", isLessThan: 100000) let nameQuery = citiesRef.whereField("name", isGreaterThanOrEqualTo: "San Francisco")
Objective-C
FIRQuery *stateQuery = [citiesRef queryWhereField:@"state" isEqualTo:@"CA"]; FIRQuery *populationQuery = [citiesRef queryWhereField:@"population" isLessThan:@100000]; FIRQuery *nameQuery = [citiesRef queryWhereField:@"name" isGreaterThanOrEqualTo:@"San Francisco"];
Kotlin
val stateQuery = citiesRef.whereEqualTo("state", "CA") val populationQuery = citiesRef.whereLessThan("population", 100000) val nameQuery = citiesRef.whereGreaterThanOrEqualTo("name", "San Francisco")
Java
Query stateQuery = citiesRef.whereEqualTo("state", "CA"); Query populationQuery = citiesRef.whereLessThan("population", 100000); Query nameQuery = citiesRef.whereGreaterThanOrEqualTo("name", "San Francisco");
Dart
final citiesRef = db.collection("cities"); final stateQuery = citiesRef.where("state", isEqualTo: "CA"); final populationQuery = citiesRef.where("population", isLessThan: 100000); final nameQuery = citiesRef.where("name", isEqualTo: "San Francisco");
জাভা
Python
Python
C++
cities_ref.WhereEqualTo("state", FieldValue::String("CA")); cities_ref.WhereLessThan("population", FieldValue::Integer(100000)); cities_ref.WhereGreaterThanOrEqualTo("name", FieldValue::String("San Francisco"));
Node.js
Go
PHP
Unity
Query stateQuery = citiesRef.WhereEqualTo("State", "CA"); Query populationQuery = citiesRef.WhereGreaterThan("Population", 1000000); Query nameQuery = citiesRef.WhereGreaterThanOrEqualTo("Name", "San Francisco");
C#
Ruby
সমান নয় (!=)
যেসব ডকুমেন্টে প্রদত্ত ফিল্ড আছে এবং তুলনামূলক ভ্যালুর সাথে মেলে না, সেগুলি ফেরত পেতে
'সমান নয় (!=)' অপারেটর ব্যবহার করুন। যেমন:
Web
const notCapitalQuery = query(citiesRef, where("capital", "!=", false));
Web
citiesRef.where("capital", "!=", false);
Swift
let notEqualQuery = citiesRef.whereField("capital", isNotEqualTo: false)
Objective-C
query = [citiesRef queryWhereField:@"capital" isNotEqualTo:@NO];
Kotlin
val notCapitalQuery = citiesRef.whereNotEqualTo("capital", false)
Java
Query notCapitalQuery = citiesRef.whereNotEqualTo("capital", false);
Dart
final citiesRef = db.collection("cities"); final notCapitals = citiesRef.where("capital", isNotEqualTo: true);
জাভা
Python
// Snippet not yet available
C++
cities_ref.WhereNotEqualTo("capital", FieldValue::Boolean(false));
Node.js
Go
// Snippet not yet availablePHP
Unity
Query query = citiesRef.WhereNotEqualTo("capital", false); Query query = citiesRef.WhereNotEqualTo("capital", false);
C#
// Snippet not yet availableRuby
এই কোয়েরি প্রতিটি city ডকুমেন্ট ফিরিয়ে দেয় যেখানে capital ফিল্ড false বা null ছাড়া অন্য কোনও ভ্যালু সহ
উপস্থিত থাকে। এর মধ্যে cityটি ডকুমেন্ট অন্তর্ভুক্ত আছে যেখানে
capital ফিল্ডের ভ্যালু true-এর সমান অথবা null ছাড়া যেকোনও নন-বুলিয়ান ভ্যালু।
এই কোয়েরি cityটি ডকুমেন্ট ফিরিয়ে দেয় না যেখানে capital ফিল্ড
নেই। সমান-নয় (!=) এবং not-in কোয়েরি সেইসব ডকুমেন্ট বাদ দেয় যেখানে
প্রদত্ত ফিল্ড নেই।
কোনও ফিল্ডে খালি স্ট্রিং (""),
null এবং NaN (সংখ্যা নয়) সহ যেকোনও ভ্যালু সেট করা থাকলে, ফিল্ডটি আছে বলে ধরা হয়। মনে রাখবেন যে null ফিল্ডের ভ্যালু != ক্লজের সাথে
ম্যাচ করে না, কারণ x != null মূল্যায়ন করে undefined দেখায়।
স্ট্যান্ডার্ড এডিশনের সীমাবদ্ধতা
!= কোয়েরির জন্য নিম্নলিখিত সীমাবদ্ধতাগুলি মনে রাখবেন। এইসব সীমাবদ্ধতা শুধু
Standard সংস্করণের ক্ষেত্রে প্রযোজ্য:
- শুধুমাত্র যে ডকুমেন্টে প্রদত্ত ফিল্ড আছে সেটিই কোয়েরির সাথে মিলতে পারে।
- আপনি কম্পাউন্ড কোয়েরিতে
not-inএবং!=একত্রিত করতে পারবেন না।
Array মেম্বারশিপ
অ্যারে ভ্যালুর উপর ভিত্তি করে ফিল্টার করতে আপনি array-contains অপারেটর ব্যবহার করতে পারেন। যেমন:
Web
import { query, where } from "firebase/firestore"; const q = query(citiesRef, where("regions", "array-contains", "west_coast"));
Web
citiesRef.where("regions", "array-contains", "west_coast");
Swift
citiesRef .whereField("regions", arrayContains: "west_coast")
Objective-C
[citiesRef queryWhereField:@"state" arrayContains:@"west_coast"];
Kotlin
val citiesRef = db.collection("cities") citiesRef.whereArrayContains("regions", "west_coast")
Java
CollectionReference citiesRef = db.collection("cities"); citiesRef.whereArrayContains("regions", "west_coast");
Dart
final citiesRef = db.collection("cities"); final westCoastcities = citiesRef.where("regions", arrayContains: "west_coast");
জাভা
Python
Python
C++
CollectionReference cities_ref = db->Collection("cities"); cities_ref.WhereArrayContains("region", FieldValue::String("west_coast"));
Node.js
Go
PHP
Unity
CollectionReference citiesRef = db.Collection("cities"); Query arrayContainsQuery = citiesRef.WhereArrayContains("region", "west_coast");
C#
Ruby
এই কোয়েরি প্রতিটি city ডকুমেন্ট রিটার্ন করে যেখানে regions ফিল্ড হল একটি অ্যারে যাতে
west_coast আছে। আপনি যে ভ্যালু কোয়েরি করেছেন, অ্যারেতে তার একাধিক ইনস্ট্যান্স থাকলে,
ডকুমেন্টটি ফলাফলে একবারই অন্তর্ভুক্ত করা হয়।
আপনি প্রতি ডিসজাংশনে (or গ্রুপ) সর্বাধিক একটি array-contains ক্লজ ব্যবহার করতে পারবেন।
আপনি একই ডিসজাংশনে array-contains-এর সাথে array-contains-any
একত্রিত করতে পারবেন না।
in, not-in ও array-contains-any
in অপারেটর ব্যবহার করে একই ফিল্ডে সর্বাধিক ৩০টি
সমতা (==) ক্লজকে লজিক্যাল OR-এর সাথে একত্রিত করুন। in কোয়েরি
এমন ডকুমেন্ট দেখায় যেখানে প্রদত্ত ফিল্ড যেকোনও তুলনামূলক ভ্যালুর সাথে ম্যাচ করে।
যেমন:
Web
import { query, where } from "firebase/firestore"; const q = query(citiesRef, where('country', 'in', ['USA', 'Japan']));
Web
citiesRef.where('country', 'in', ['USA', 'Japan']);
Swift
let citiesRef = db.collection("cities") citiesRef.whereField("country", in: ["USA", "Japan"])
Objective-C
FIRCollectionReference *citiesRef = [self.db collectionWithPath:@"cities"]; [citiesRef queryWhereField:@"country" in:@[@"USA", @"Japan"]];
Kotlin
val citiesRef = db.collection("cities") citiesRef.whereIn("country", listOf("USA", "Japan"))
Java
CollectionReference citiesRef = db.collection("cities"); citiesRef.whereIn("country", Arrays.asList("USA", "Japan"));
Dart
final citiesRef = db.collection("cities"); final cities = citiesRef.where("country", whereIn: ["USA", "Japan"]);
জাভা
Python
Python
C++
CollectionReference cities_ref = db->Collection("cities"); cities_ref.WhereIn("country", std::vector<FieldValue> { FieldValue::String("USA"), FieldValue::String("Japan") });
Node.js
Go
PHP
Unity
CollectionReference citiesRef = db.Collection("cities"); ListcountriesList = new List<object>() {"USA", "Japan"}; Query whereInQuery = citiesRef.WhereIn("country", countriesList);
C#
Ruby
এই কোয়েরি প্রতিটি city ডকুমেন্ট ফিরিয়ে দেয় যেখানে country ফিল্ড USA বা Japan-এ সেট করা আছে। উদাহরণ ডেটা থেকে, এর মধ্যে SF, LA, DC ও TOK ডকুমেন্ট অন্তর্ভুক্ত।
not-in
একই ফিল্ডে লজিক্যাল AND-এর সাথে সর্বাধিক ১০টি সমান নয় (!=) ক্লজ একত্রিত করতে not-in অপারেটর ব্যবহার করুন। not-in কোয়েরি এমন ডকুমেন্ট রিটার্ন করে যেখানে
প্রদত্ত ফিল্ড থাকে, null হয় না এবং তুলনামূলক মানের
কোনওটির সাথে মেলে না। যেমন:
Web
import { query, where } from "firebase/firestore"; const q = query(citiesRef, where('country', 'not-in', ['USA', 'Japan']));
Web
citiesRef.where('country', 'not-in', ['USA', 'Japan']);
Swift
citiesRef.whereField("country", notIn: ["USA", "Japan"])
Objective-C
[citiesRef queryWhereField:@"country" notIn:@[@"USA", @"Japan"]];
Kotlin
citiesRef.whereNotIn("country", listOf("USA", "Japan"))
Java
citiesRef.whereNotIn("country", Arrays.asList("USA", "Japan"));
Dart
final citiesRef = db.collection("cities"); final cities = citiesRef.where("country", whereNotIn: ["USA", "Japan"]);
জাভা
Python
// Snippet not yet available
C++
cities_ref.WhereNotIn("country", std::vector<FieldValue> { FieldValue::String("USA"), FieldValue::String("Japan") });
Node.js
Go
// Snippet not yet availablePHP
Unity
Query query = citiesRef.WhereNotIn(new FieldPath("country"), new List<string>{"USA", "Japan"}); Query query = citiesRef.WhereNotIn("country", new List<object>(){"USA", "Japan"});
C#
// Snippet not yet availableRuby
এই কোয়েরি প্রতিটি city ডকুমেন্ট রিটার্ন করে যেখানে country ফিল্ড আছে এবং
USA, Japan বা null-এ সেট করা নেই। উদাহরণ ডেটা থেকে, এর মধ্যে London এবং Hong Kong ডকুমেন্ট অন্তর্ভুক্ত।
not-in কোয়েরি সেইসব ডকুমেন্ট বাদ দেয় যেখানে
প্রদত্ত ফিল্ড নেই। কোনও ফিল্ডে কোনও ভ্যালু সেট করা থাকলে সেটি বিদ্যমান থাকে,
যার মধ্যে খালি স্ট্রিং (""), null এবং NaN (সংখ্যা নয়) অন্তর্ভুক্ত। মনে রাখবেন
যে x != null মূল্যায়ন করে undefined দেখায়। not-in কোয়েরিতে
null-কে তুলনামূলক ভ্যালু হিসেবে ব্যবহার করা হলে, কোনও ডকুমেন্টের সাথে তা ম্যাচ করে না।
array-contains-any
OR লজিক সহ একই ফিল্ডে সর্বাধিক ৩০টি
array-contains ক্লজ একত্রিত করতে array-contains-any অপারেটর ব্যবহার করুন। array-contains-any
কোয়েরি এমন ডকুমেন্ট রিটার্ন করে যেখানে প্রদত্ত ফিল্ড হল একটি অ্যারে
যার মধ্যে এক বা একাধিক তুলনামূলক ভ্যালু থাকে:
Web
import { query, where } from "firebase/firestore"; const q = query(citiesRef, where('regions', 'array-contains-any', [['west_coast'], ['east_coast']]));
Web
citiesRef.where('regions', 'array-contains-any', [['west_coast'], ['east_coast']]);
Swift
let citiesRef = db.collection("cities") citiesRef.whereField("regions", arrayContainsAny: ["west_coast", "east_coast"])
Objective-C
FIRCollectionReference *citiesRef = [self.db collectionWithPath:@"cities"]; [citiesRef queryWhereField:@"regions" arrayContainsAny:@[@"west_coast", @"east_coast"]];
Kotlin
val citiesRef = db.collection("cities") citiesRef.whereArrayContainsAny("regions", listOf("west_coast", "east_coast"))
Java
CollectionReference citiesRef = db.collection("cities"); citiesRef.whereArrayContainsAny("regions", Arrays.asList("west_coast", "east_coast"));
Dart
final citiesRef = db.collection("cities"); final cities = citiesRef .where("regions", arrayContainsAny: ["west_coast", "east_coast"]);
জাভা
Python
Python
C++
CollectionReference cities_ref = db->Collection("cities"); cities_ref.WhereArrayContainsAny("region", std::vector<FieldValue> { FieldValue::String("west_coast"), FieldValue::String("east_coast") });
Node.js
Go
PHP
Unity
Query query = citiesRef.WhereArrayContainsAny( "regions", new List<object>() { new List<object>(){"west_coast"}, new List<object>(){"east_coast"}});
C#
Ruby
এই কোয়েরি প্রতিটি শহরের ডকুমেন্ট রিটার্ন করে যেখানে regions ফিল্ড হল একটি অ্যারে
যার মধ্যে west_coast বা east_coast আছে। উদাহরণ ডেটা থেকে, এর মধ্যে
SF, LA এবং DC ডকুমেন্ট অন্তর্ভুক্ত।
array-contains-any থেকে পাওয়া ফলাফল ডি-ডুপ করা হয়েছে। কোনও ডকুমেন্টের অ্যারে ফিল্ড
একাধিক তুলনামূলক ভ্যালুর সাথে মিললেও, ফলাফল সেটে সেই
ডকুমেন্ট একবারই অন্তর্ভুক্ত করা হয়।
array-contains-any সবসময় অ্যারে ডেটার ধরন অনুযায়ী ফিল্টার করে। যেমন, উপরের কোয়েরিটি এমন কোনও শহরের ডকুমেন্ট রিটার্ন করবে না যেখানে অ্যারের পরিবর্তে regions ফিল্ডটি হল স্ট্রিং west_coast।
আপনি in-এর জন্য তুলনামূলক ভ্যালু হিসেবে অ্যারে ভ্যালু ব্যবহার করতে পারেন, তবে
array-contains-any-এর মতো না করে, ক্লজটি অ্যারের দৈর্ঘ্য, ক্রম এবং ভ্যালুর সম্পূর্ণ মিলের সাথে মেলে। যেমন:
Web
import { query, where } from "firebase/firestore"; const q = query(citiesRef, where('regions', 'in', [['west_coast'], ['east_coast']]));
Web
citiesRef.where('regions', 'in', [['west_coast'], ['east_coast']]);
Swift
citiesRef.whereField("regions", in: [["west_coast"], ["east_coast"]])
Objective-C
[citiesRef queryWhereField:@"regions" in:@[@[@"west_coast"], @[@"east_coast"]]];
Kotlin
citiesRef.whereIn("regions", listOf(arrayOf("west_coast"), arrayOf("east_coast")))
Java
citiesRef.whereIn("regions", Arrays.asList(new String[]{"west_coast"}, new String[]{"east_coast"}));
Dart
final citiesRef = db.collection("cities"); final cities = citiesRef.where("regions", whereIn: [ ["west_coast"], ["east_coast"] ]);
জাভা
Python
Python
C++
cities_ref.WhereIn("region", std::vector<FieldValue> { FieldValue::String("west_coast"), FieldValue::String("east_coast") });
Node.js
Go
PHP
Unity
Query query = citiesRef.WhereIn(new FieldPath("regions"), new List<string>{"west_coast", "east_coast"});
C#
Ruby
এই কোয়েরি প্রতিটি শহরের ডকুমেন্ট রিটার্ন করে যেখানে regions ফিল্ড হল একটি অ্যারে
যার মধ্যে west_coast বা east_coast-এর ঠিক একটি এলিমেন্ট থাকে।
উদাহরণ ডেটা থেকে, শুধুমাত্র DC ডকুমেন্টটি ["east_coast"]-এর regions ফিল্ডের সাথে
উপযুক্ত। তবে, SF ডকুমেন্টটি
মেলেনি কারণ এটির regions ফিল্ডটি হল ["west_coast", "norcal"]।
স্ট্যান্ডার্ড এডিশনের সীমাবদ্ধতা
in, not-in ও array-contains-any-এর জন্য নিম্নলিখিত সীমাবদ্ধতাগুলি মনে রাখবেন।
এইসব সীমাবদ্ধতা শুধুমাত্র Standard সংস্করণের ক্ষেত্রে প্রযোজ্য:
- Cloud Firestore,
or,inওarray-contains-anyঅপারেটরের মাধ্যমে লজিক্যালORকোয়েরির জন্য সহায়তা প্রদান করে। এইসব কোয়েরি কোয়েরির ডিসজাঙ্কটিভ নরমাল ফর্মের উপর ভিত্তি করে ৩০টি ডিসজাঙ্কশনে সীমিত। এই সীমা নির্দিষ্ট এবং এটি অ্যাডজাস্ট করা যাবে না। - আপনি প্রতি ডিসজাংশনে (
orগ্রুপ) সর্বাধিক একটিarray-containsক্লজ ব্যবহার করতে পারবেন। আপনি একই ডিসজাংশনেarray-contains-এর সাথেarray-contains-anyএকত্রিত করতে পারবেন না। - আপনি
not-in-এর সাথে!=-এর সমান নয় এমন কিছু একত্রিত করতে পারবেন না। not-in-এ সর্বাধিক ১০টি তুলনামূলক ভ্যালু ব্যবহার করা যায়।
কম্পাউন্ড (AND) কোয়েরি
আপনি একাধিক ইকুয়ালিটি অপারেটর (== বা array-contains) চেইন করে লজিক্যাল AND-এর সাথে কনস্ট্রেন্ট একত্রিত করতে পারেন। তবে, ইকুয়ালিটি অপারেটরকে ইনইকুয়ালিটি অপারেটর, <, <=, > ও !=-এর সাথে একত্রিত করতে আপনাকে অবশ্যই একটি কম্পোজিট ইন্ডেক্স তৈরি করতে হবে।
Web
import { query, where } from "firebase/firestore"; const q1 = query(citiesRef, where("state", "==", "CO"), where("name", "==", "Denver")); const q2 = query(citiesRef, where("state", "==", "CA"), where("population", "<", 1000000));
Web
const q1 = citiesRef.where("state", "==", "CO").where("name", "==", "Denver"); const q2 = citiesRef.where("state", "==", "CA").where("population", "<", 1000000);
Swift
citiesRef .whereField("state", isEqualTo: "CO") .whereField("name", isEqualTo: "Denver") citiesRef .whereField("state", isEqualTo: "CA") .whereField("population", isLessThan: 1000000)
Objective-C
[[citiesRef queryWhereField:@"state" isEqualTo:@"CO"] queryWhereField:@"name" isGreaterThanOrEqualTo:@"Denver"]; [[citiesRef queryWhereField:@"state" isEqualTo:@"CA"] queryWhereField:@"population" isLessThan:@1000000];
Kotlin
citiesRef.whereEqualTo("state", "CO").whereEqualTo("name", "Denver") citiesRef.whereEqualTo("state", "CA").whereLessThan("population", 1000000)
Java
citiesRef.whereEqualTo("state", "CO").whereEqualTo("name", "Denver"); citiesRef.whereEqualTo("state", "CA").whereLessThan("population", 1000000);
Dart
final citiesRef = db.collection("cities"); citiesRef .where("state", isEqualTo: "CO") .where("name", isEqualTo: "Denver"); citiesRef .where("state", isEqualTo: "CA") .where("population", isLessThan: 1000000);
জাভা
Python
Python
C++
cities_ref.WhereEqualTo("state", FieldValue::String("CO")) .WhereEqualTo("name", FieldValue::String("Denver")); cities_ref.WhereEqualTo("state", FieldValue::String("CA")) .WhereLessThan("population", FieldValue::Integer(1000000));
Node.js
Go
PHP
Unity
Query chainedQuery = citiesRef .WhereEqualTo("State", "CA") .WhereEqualTo("Name", "San Francisco");
C#
Ruby
ORটি কোয়েরি
আপনি লজিক্যাল OR-এর সাথে কনস্ট্রেন্ট একত্রিত করতে পারবেন। যেমন:
Web
const q = query(citiesRef, or(where('capital', '==', true), where('population', '>=', 1000000) ) );
Web
উপলভ্য নেই।
Swift
let query = db.collection("cities").whereFilter(Filter.orFilter([ Filter.whereField("capital", isEqualTo: true), Filter.whereField("population", isGreaterThanOrEqualTo: 1000000); ]))
Objective-C
FIRCollectionReference *collection = [self.db collectionWithPath:@"cities"]; FIRQuery *query = [collection queryWhereFilter:[FIRFilter orFilterWithFilters:@[ [FIRFilter filterWhereField:@"capital" isEqualTo:@YES], [FIRFilter filterWhereField:@"population" isGreaterThanOrEqualTo:@1000000] ]]];
Kotlin
val query = collection.where(Filter.or( Filter.equalTo("capital", true), Filter.greaterThanOrEqualTo("population", 1000000) ))
Java
Query query = collection.where(Filter.or( Filter.equalTo("capital", true), Filter.greaterThanOrEqualTo("population", 1000000) ));
Dart
var query = db.collection("cities").where( Filter.or( Filter("capital", isEqualTo: true), Filter("population", isGreaterThan: 1000000), ), );
জাভা
স্নিপেট উপলভ্য নেই।
Python
Python
স্নিপেট উপলভ্য নেই।
C++
স্নিপেট উপলভ্য নেই।
Node.js
const bigCities = await citiesRef .where( Filter.or( Filter.where('capital', '==', true), Filter.where('population', '>=', 1000000) ) ) .get();
Go
PHP
স্নিপেট উপলভ্য নেই।
Unity
Query query = citiesRef.Where(Filter.Or( Filter.EqualTo("State", "CA"), Filter.GreaterThanOrEqualTo("population", 1000000) )); query.GetSnapshotAsync().ContinueWithOnMainThread((querySnapshotTask) => { foreach (DocumentSnapshot documentSnapshot in querySnapshotTask.Result.Documents) { Debug.Log(String.Format("Document {0} returned by query State=CA or population >= {1}", documentSnapshot.Id, 1000000)); } });
C#
স্নিপেট উপলভ্য নেই।
Ruby
স্নিপেট উপলভ্য নেই।
Cloud Firestore আপনার কম্পোজিট ইন্ডেক্স ব্যবহার করে OR কোয়েরি পরিবেশন করে। আপনার
ইনডেক্স কোয়েরি সাপোর্ট না করলে, Cloud Firestore
আপনার ডেটাবেসের জন্য অতিরিক্ত ইনডেক্স সাজেস্ট করে।
OR এবং AND অপারেশনের কম্বিনেশন ফিল্টার করতে আপনি কম্পাউন্ড কোয়েরির সাথে OR কোয়েরি কম্বাইন করতে পারবেন। যেমন:
Web
const q = query(collection(db, "cities"), and( where('state', '==', 'CA'), or( where('capital', '==', true), where('population', '>=', 1000000) ) ));
Web
উপলভ্য নেই।
Swift
let query = db.collection("cities").whereFilter(Filter.andFilter([ Filter.whereField("state", isEqualTo: "CA"), Filter.orFilter([ Filter.whereField("capital", isEqualTo: true), Filter.whereField("population", isGreaterOrEqualTo: 1000000) ]) ]))
Objective-C
FIRCollectionReference *collection = [self.db collectionWithPath:@"cities"]; FIRQuery *query = [collection queryWhereFilter:[FIRFilter andFilterWithFilters:@[ [FIRFilter filterWhereField:@"state" isEqualTo:@"CA"], [FIRFilter orFilterWithFilters:@[ [FIRFilter filterWhereField:@"capital" isEqualTo:@YES], [FIRFilter filterWhereField:@"population" isGreaterThanOrEqualTo:@1000000] ]] ]]];
Kotlin
val query = collection.where(Filter.and( Filter.equalTo("state", "CA"), Filter.or( Filter.equalTo("capital", true), Filter.greaterThanOrEqualTo("population", 1000000) ) ))
Java
Query query = collection.where(Filter.and( Filter.equalTo("state", "CA"), Filter.or( Filter.equalTo("capital", true), Filter.greaterThanOrEqualTo("population", 1000000) ) ));
Dart
var query = db.collection("cities").where( Filter.and( Filter("state", isEqualTo: "CA"), Filter.or( Filter("capital", isEqualTo: true), Filter("population", isGreaterThan: 1000000), ), ), );
জাভা
স্নিপেট উপলভ্য নেই।
Python
স্নিপেট উপলভ্য নেই।
Python
স্নিপেট উপলভ্য নেই।
C++
স্নিপেট উপলভ্য নেই।
Node.js
const bigCitiesInCalifornia = await citiesRef .where('state', '==', 'CA') .where( Filter.or( Filter.where('capital', '==', true), Filter.where('population', '>=', 1000000) ) ) .get();
Go
স্নিপেট উপলভ্য নেই।
PHP
স্নিপেট উপলভ্য নেই।
Unity
Query query = citiesRef.Where(Filter.And( Filter.EqualTo("state", "CA"), Filter.Or( Filter.EqualTo("capital", true), Filter.GreaterThanOrEqualTo("population", 1000000) ) ));
C#
স্নিপেট উপলভ্য নেই।
Ruby
স্নিপেট উপলভ্য নেই।
স্ট্যান্ডার্ড এডিশনের সীমাবদ্ধতা
or কোয়েরির জন্য নিম্নলিখিত সীমাবদ্ধতাগুলি মনে রাখবেন। এইসব সীমাবদ্ধতা শুধু
Standard সংস্করণের ক্ষেত্রে প্রযোজ্য:
Cloud Firestore কোয়েরির ডিসজাঙ্কটিভ নরমাল ফর্মের উপর ভিত্তি করে সর্বাধিক ৩০টি ডিসজাঙ্কশনে কোয়েরি সীমাবদ্ধ করে। এই সীমা নির্দিষ্ট করা আছে এবং এটি অ্যাডজাস্ট করা যাবে না। আপনি একাধিক
ORগ্রুপেরANDকরার সময় এই সীমায় পৌঁছে যাওয়ার সম্ভাবনা বেশি।আপনি একই কোয়েরিতে
in,array-contains-anyবাor-এর সাথেnot-inএকত্রিত করতে পারবেন না।
সীমাবদ্ধতার সম্পূর্ণ বিবরণের জন্য, কোয়েরি সংক্রান্ত সীমাবদ্ধতা দেখুন।
কালেকশন গ্রুপ কোয়েরি
একই আইডি সহ সব কালেকশন নিয়ে একটি কালেকশন গ্রুপ তৈরি হয়। ডিফল্ট হিসেবে, কোয়েরি আপনার ডেটাবেসের একটি সংগ্রহ থেকে ফলাফল নিয়ে আসে। একটি কালেকশন গ্রুপ কোয়েরি ব্যবহার করে একটি কালেকশন গ্রুপ থেকে ডকুমেন্টগুলি পুনরুদ্ধার করুন, একটি একক কালেকশন থেকে নয়।
যেমন, আপনি প্রতিটি শহরের জন্য ল্যান্ডমার্কের সাবকালেকশন যোগ করে
landmarks কালেকশন গ্রুপ তৈরি করতে পারেন:
Web
import { collection, addDoc } from "firebase/firestore"; const citiesRef = collection(db, 'cities'); await Promise.all([ addDoc(collection(citiesRef, 'SF', 'landmarks'), { name: 'Golden Gate Bridge', type: 'bridge' }), addDoc(collection(citiesRef, 'SF', 'landmarks'), { name: 'Legion of Honor', type: 'museum' }), addDoc(collection(citiesRef, 'LA', 'landmarks'), { name: 'Griffith Park', type: 'park' }), addDoc(collection(citiesRef, 'LA', 'landmarks'), { name: 'The Getty', type: 'museum' }), addDoc(collection(citiesRef, 'DC', 'landmarks'), { name: 'Lincoln Memorial', type: 'memorial' }), addDoc(collection(citiesRef, 'DC', 'landmarks'), { name: 'National Air and Space Museum', type: 'museum' }), addDoc(collection(citiesRef, 'TOK', 'landmarks'), { name: 'Ueno Park', type: 'park' }), addDoc(collection(citiesRef, 'TOK', 'landmarks'), { name: 'National Museum of Nature and Science', type: 'museum' }), addDoc(collection(citiesRef, 'BJ', 'landmarks'), { name: 'Jingshan Park', type: 'park' }), addDoc(collection(citiesRef, 'BJ', 'landmarks'), { name: 'Beijing Ancient Observatory', type: 'museum' }) ]);
Web
var citiesRef = db.collection('cities'); var landmarks = Promise.all([ citiesRef.doc('SF').collection('landmarks').doc().set({ name: 'Golden Gate Bridge', type: 'bridge' }), citiesRef.doc('SF').collection('landmarks').doc().set({ name: 'Legion of Honor', type: 'museum' }), citiesRef.doc('LA').collection('landmarks').doc().set({ name: 'Griffith Park', type: 'park' }), citiesRef.doc('LA').collection('landmarks').doc().set({ name: 'The Getty', type: 'museum' }), citiesRef.doc('DC').collection('landmarks').doc().set({ name: 'Lincoln Memorial', type: 'memorial' }), citiesRef.doc('DC').collection('landmarks').doc().set({ name: 'National Air and Space Museum', type: 'museum' }), citiesRef.doc('TOK').collection('landmarks').doc().set({ name: 'Ueno Park', type: 'park' }), citiesRef.doc('TOK').collection('landmarks').doc().set({ name: 'National Museum of Nature and Science', type: 'museum' }), citiesRef.doc('BJ').collection('landmarks').doc().set({ name: 'Jingshan Park', type: 'park' }), citiesRef.doc('BJ').collection('landmarks').doc().set({ name: 'Beijing Ancient Observatory', type: 'museum' }) ]);
Swift
let citiesRef = db.collection("cities") var data = ["name": "Golden Gate Bridge", "type": "bridge"] citiesRef.document("SF").collection("landmarks").addDocument(data: data) data = ["name": "Legion of Honor", "type": "museum"] citiesRef.document("SF").collection("landmarks").addDocument(data: data) data = ["name": "Griffith Park", "type": "park"] citiesRef.document("LA").collection("landmarks").addDocument(data: data) data = ["name": "The Getty", "type": "museum"] citiesRef.document("LA").collection("landmarks").addDocument(data: data) data = ["name": "Lincoln Memorial", "type": "memorial"] citiesRef.document("DC").collection("landmarks").addDocument(data: data) data = ["name": "National Air and Space Museum", "type": "museum"] citiesRef.document("DC").collection("landmarks").addDocument(data: data) data = ["name": "Ueno Park", "type": "park"] citiesRef.document("TOK").collection("landmarks").addDocument(data: data) data = ["name": "National Museum of Nature and Science", "type": "museum"] citiesRef.document("TOK").collection("landmarks").addDocument(data: data) data = ["name": "Jingshan Park", "type": "park"] citiesRef.document("BJ").collection("landmarks").addDocument(data: data) data = ["name": "Beijing Ancient Observatory", "type": "museum"] citiesRef.document("BJ").collection("landmarks").addDocument(data: data)
Objective-C
FIRCollectionReference *citiesRef = [self.db collectionWithPath:@"cities"]; NSDictionary *data = @{@"name": @"Golden Gate Bridge", @"type": @"bridge"}; [[[citiesRef documentWithPath:@"SF"] collectionWithPath:@"landmarks"] addDocumentWithData:data]; data = @{@"name": @"Legion of Honor", @"type": @"museum"}; [[[citiesRef documentWithPath:@"SF"] collectionWithPath:@"landmarks"] addDocumentWithData:data]; data = @{@"name": @"Griffith Park", @"type": @"park"}; [[[citiesRef documentWithPath:@"LA"] collectionWithPath:@"landmarks"] addDocumentWithData:data]; data = @{@"name": @"The Getty", @"type": @"museum"}; [[[citiesRef documentWithPath:@"LA"] collectionWithPath:@"landmarks"] addDocumentWithData:data]; data = @{@"name": @"Lincoln Memorial", @"type": @"memorial"}; [[[citiesRef documentWithPath:@"DC"] collectionWithPath:@"landmarks"] addDocumentWithData:data]; data = @{@"name": @"National Air and Space Museum", @"type": @"museum"}; [[[citiesRef documentWithPath:@"DC"] collectionWithPath:@"landmarks"] addDocumentWithData:data]; data = @{@"name": @"Ueno Park", @"type": @"park"}; [[[citiesRef documentWithPath:@"TOK"] collectionWithPath:@"landmarks"] addDocumentWithData:data]; data = @{@"name": @"National Museum of Nature and Science", @"type": @"museum"}; [[[citiesRef documentWithPath:@"TOK"] collectionWithPath:@"landmarks"] addDocumentWithData:data]; data = @{@"name": @"Jingshan Park", @"type": @"park"}; [[[citiesRef documentWithPath:@"BJ"] collectionWithPath:@"landmarks"] addDocumentWithData:data]; data = @{@"name": @"Beijing Ancient Observatory", @"type": @"museum"}; [[[citiesRef documentWithPath:@"BJ"] collectionWithPath:@"landmarks"] addDocumentWithData:data];
Kotlin
val citiesRef = db.collection("cities") val ggbData = mapOf( "name" to "Golden Gate Bridge", "type" to "bridge", ) citiesRef.document("SF").collection("landmarks").add(ggbData) val lohData = mapOf( "name" to "Legion of Honor", "type" to "museum", ) citiesRef.document("SF").collection("landmarks").add(lohData) val gpData = mapOf( "name" to "Griffth Park", "type" to "park", ) citiesRef.document("LA").collection("landmarks").add(gpData) val tgData = mapOf( "name" to "The Getty", "type" to "museum", ) citiesRef.document("LA").collection("landmarks").add(tgData) val lmData = mapOf( "name" to "Lincoln Memorial", "type" to "memorial", ) citiesRef.document("DC").collection("landmarks").add(lmData) val nasaData = mapOf( "name" to "National Air and Space Museum", "type" to "museum", ) citiesRef.document("DC").collection("landmarks").add(nasaData) val upData = mapOf( "name" to "Ueno Park", "type" to "park", ) citiesRef.document("TOK").collection("landmarks").add(upData) val nmData = mapOf( "name" to "National Musuem of Nature and Science", "type" to "museum", ) citiesRef.document("TOK").collection("landmarks").add(nmData) val jpData = mapOf( "name" to "Jingshan Park", "type" to "park", ) citiesRef.document("BJ").collection("landmarks").add(jpData) val baoData = mapOf( "name" to "Beijing Ancient Observatory", "type" to "musuem", ) citiesRef.document("BJ").collection("landmarks").add(baoData)
Java
CollectionReference citiesRef = db.collection("cities"); Map<String, Object> ggbData = new HashMap<>(); ggbData.put("name", "Golden Gate Bridge"); ggbData.put("type", "bridge"); citiesRef.document("SF").collection("landmarks").add(ggbData); Map<String, Object> lohData = new HashMap<>(); lohData.put("name", "Legion of Honor"); lohData.put("type", "museum"); citiesRef.document("SF").collection("landmarks").add(lohData); Map<String, Object> gpData = new HashMap<>(); gpData.put("name", "Griffith Park"); gpData.put("type", "park"); citiesRef.document("LA").collection("landmarks").add(gpData); Map<String, Object> tgData = new HashMap<>(); tgData.put("name", "The Getty"); tgData.put("type", "museum"); citiesRef.document("LA").collection("landmarks").add(tgData); Map<String, Object> lmData = new HashMap<>(); lmData.put("name", "Lincoln Memorial"); lmData.put("type", "memorial"); citiesRef.document("DC").collection("landmarks").add(lmData); Map<String, Object> nasaData = new HashMap<>(); nasaData.put("name", "National Air and Space Museum"); nasaData.put("type", "museum"); citiesRef.document("DC").collection("landmarks").add(nasaData); Map<String, Object> upData = new HashMap<>(); upData.put("name", "Ueno Park"); upData.put("type", "park"); citiesRef.document("TOK").collection("landmarks").add(upData); Map<String, Object> nmData = new HashMap<>(); nmData.put("name", "National Museum of Nature and Science"); nmData.put("type", "museum"); citiesRef.document("TOK").collection("landmarks").add(nmData); Map<String, Object> jpData = new HashMap<>(); jpData.put("name", "Jingshan Park"); jpData.put("type", "park"); citiesRef.document("BJ").collection("landmarks").add(jpData); Map<String, Object> baoData = new HashMap<>(); baoData.put("name", "Beijing Ancient Observatory"); baoData.put("type", "museum"); citiesRef.document("BJ").collection("landmarks").add(baoData);
Dart
final citiesRef = db.collection("cities"); final ggbData = {"name": "Golden Gate Bridge", "type": "bridge"}; citiesRef.doc("SF").collection("landmarks").add(ggbData); final lohData = {"name": "Legion of Honor", "type": "museum"}; citiesRef.doc("SF").collection("landmarks").add(lohData); final gpData = {"name": "Griffth Park", "type": "park"}; citiesRef.doc("LA").collection("landmarks").add(gpData); final tgData = {"name": "The Getty", "type": "museum"}; citiesRef.doc("LA").collection("landmarks").add(tgData); final lmData = {"name": "Lincoln Memorial", "type": "memorial"}; citiesRef.doc("DC").collection("landmarks").add(lmData); final nasaData = { "name": "National Air and Space Museum", "type": "museum" }; citiesRef.doc("DC").collection("landmarks").add(nasaData); final upData = {"name": "Ueno Park", "type": "park"}; citiesRef.doc("TOK").collection("landmarks").add(upData); final nmData = { "name": "National Musuem of Nature and Science", "type": "museum" }; citiesRef.doc("TOK").collection("landmarks").add(nmData); final jpData = {"name": "Jingshan Park", "type": "park"}; citiesRef.doc("BJ").collection("landmarks").add(jpData); final baoData = {"name": "Beijing Ancient Observatory", "type": "musuem"}; citiesRef.doc("BJ").collection("landmarks").add(baoData);
জাভা
Python
Python
C++
// Get a new write batch WriteBatch batch = db->batch(); DocumentReference sf_ref = db->Collection("cities").Document("SF"); batch.Set(sf_ref,{{"name", FieldValue::String("Golden Gate Bridge")}, {"type", FieldValue::String("bridge")}}); batch.Set(sf_ref,{{"name", FieldValue::String("Legion of Honor")}, {"type", FieldValue::String("museum")}}); DocumentReference la_ref = db->Collection("cities").Document("LA"); batch.Set(la_ref,{{"name", FieldValue::String("Griffith Park")}, {"type", FieldValue::String("park")}}); batch.Set(la_ref,{{"name", FieldValue::String("The Getty")}, {"type", FieldValue::String("museum")}}); DocumentReference dc_ref = db->Collection("cities").Document("DC"); batch.Set(dc_ref,{{"name", FieldValue::String("Lincoln Memorial")}, {"type", FieldValue::String("memorial")}}); batch.Set(dc_ref,{{"name", FieldValue::String("National Air and Space Museum")}, {"type", FieldValue::String("museum")}}); DocumentReference tok_ref = db->Collection("cities").Document("TOK"); batch.Set(tok_ref,{{"name", FieldValue::String("Ueno Park")}, {"type", FieldValue::String("park")}}); batch.Set(tok_ref,{{"name", FieldValue::String("National Museum of Nature and Science")}, {"type", FieldValue::String("museum")}}); DocumentReference bj_ref = db->Collection("cities").Document("BJ"); batch.Set(bj_ref,{{"name", FieldValue::String("Jingshan Park")}, {"type", FieldValue::String("park")}}); batch.Set(bj_ref,{{"name", FieldValue::String("Beijing Ancient Observatory")}, {"type", FieldValue::String("museum")}}); // Commit the batch batch.Commit().OnCompletion([](const Future<void>& future) { if (future.error() == Error::kErrorOk) { std::cout << "Write batch success!" << std::endl; } else { std::cout << "Write batch failure: " << future.error_message() << std::endl; } });
Node.js
Go
PHP
Unity
List<Task<DocumentReference>> futures = new List<Task<DocumentReference>>(){ citiesRef .Document("SF") .Collection("landmarks") .AddAsync( new Dictionary<string, object>() { {"name", "Golden Gate Bridge"}, {"type", "bridge"}, } ), citiesRef .Document("SF") .Collection("landmarks") .AddAsync( new Dictionary<string, object>() { {"name", "Legion of Honor"}, {"type", "museum"}, } ), citiesRef .Document("LA") .Collection("landmarks") .AddAsync( new Dictionary<string, object>() { {"name", "Griffith Park"}, {"type", "park"}, } ), citiesRef .Document("LA") .Collection("landmarks") .AddAsync( new Dictionary<string, object>() { {"name", "The Getty"}, {"type", "museum"}, } ), citiesRef .Document("DC") .Collection("landmarks") .AddAsync( new Dictionary<string, object>() { {"name", "Lincoln Memorial"}, {"type", "memorial"}, } ), citiesRef .Document("DC") .Collection("landmarks") .AddAsync( new Dictionary<string, object>() { {"name", "National Air and Space Museum"}, {"type", "museum"}, } ), citiesRef .Document("TOK") .Collection("landmarks") .AddAsync( new Dictionary<string, object>() { {"name", "Ueno Park"}, {"type", "park"}, } ), citiesRef .Document("TOK") .Collection("landmarks") .AddAsync( new Dictionary<string, object>() { {"name", "National Museum of Nature and Science"}, {"type", "museum"}, } ), citiesRef .Document("BJ") .Collection("landmarks") .AddAsync( new Dictionary<string, object>() { {"name", "Jingshan Park"}, {"type", "park"}, } ), citiesRef .Document("BJ") .Collection("landmarks") .AddAsync( new Dictionary<string, object>() { {"name", "Beijing Ancient Observatory"}, {"type", "museum"}, } )}; DocumentReference[] landmarks = Task.WhenAll(futures).Result;
C#
Ruby
আমরা আগে বর্ণনা করা সহজ ও জটিল কোয়েরি ব্যবহার করে একটি শহরের landmarks সাবকালেকশন কোয়েরি করতে পারি, তবে আপনি হয়ত প্রতিটি শহরের landmarks সাবকালেকশন থেকে একবারে ফলাফল পেতে চাইবেন।
landmarks কালেকশন গ্রুপে landmarks আইডি সহ সব কালেকশন থাকে এবং আপনি কালেকশন গ্রুপ কোয়েরি ব্যবহার করে এটি কোয়েরি করতে পারবেন। যেমন,
এই কালেকশন গ্রুপ কোয়েরি সব শহরের সমস্ত museum ল্যান্ডমার্ক খুঁজে বের করে:
Web
import { collectionGroup, query, where, getDocs } from "firebase/firestore"; const museums = query(collectionGroup(db, 'landmarks'), where('type', '==', 'museum')); const querySnapshot = await getDocs(museums); querySnapshot.forEach((doc) => { console.log(doc.id, ' => ', doc.data()); });
Web
var museums = db.collectionGroup('landmarks').where('type', '==', 'museum'); museums.get().then((querySnapshot) => { querySnapshot.forEach((doc) => { console.log(doc.id, ' => ', doc.data()); }); });
Swift
db.collectionGroup("landmarks").whereField("type", isEqualTo: "museum").getDocuments { (snapshot, error) in // ... }
Objective-C
[[[self.db collectionGroupWithID:@"landmarks"] queryWhereField:@"type" isEqualTo:@"museum"] getDocumentsWithCompletion:^(FIRQuerySnapshot *snapshot, NSError *error) { // ... }];
Kotlin
db.collectionGroup("landmarks").whereEqualTo("type", "museum").get() .addOnSuccessListener { queryDocumentSnapshots -> // ... }
Java
db.collectionGroup("landmarks").whereEqualTo("type", "museum").get() .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() { @Override public void onSuccess(QuerySnapshot queryDocumentSnapshots) { // ... } });
Dart
db .collectionGroup("landmarks") .where("type", isEqualTo: "museum") .get() .then( (res) => print("Successfully completed"), onError: (e) => print("Error completing: $e"), );
জাভা
Python
Python
C++
db->CollectionGroup("landmarks") .WhereEqualTo("type", FieldValue::String("museum")).Get() .OnCompletion([](const firebase::Future<QuerySnapshot>& future) { if (future.error() == Error::kErrorOk) { for (const DocumentSnapshot& document : future.result()->documents()) { std::cout << document << std::endl; } } else { std::cout << "Error getting documents: " << future.error_message() << std::endl; } });
Node.js
Go
PHP
Unity
Query museums = db.CollectionGroup("landmarks").WhereEqualTo("type", "museum"); museums.GetSnapshotAsync().ContinueWithOnMainThread((querySnapshotTask) => { foreach (DocumentSnapshot documentSnapshot in querySnapshotTask.Result.Documents) { Debug.Log(String.Format("Document {0} returned by query State=CA", documentSnapshot.Id)); } });
C#
Ruby
কালেকশন গ্রুপ কোয়েরি ব্যবহার করার আগে, আপনাকে অবশ্যই একটি ইন্ডেক্স তৈরি করতে হবে যা আপনার কালেকশন গ্রুপ কোয়েরি সমর্থন করে। আপনি কোনও ত্রুটি মেসেজ, কনসোল বা Firebase CLI-এর মাধ্যমে ইন্ডেক্স তৈরি করতে পারবেন।
ওয়েব ও মোবাইল SDK-এর জন্য, আপনাকে অবশ্যই এমন নিয়ম তৈরি করতে হবে যা আপনার কালেকশন গ্রুপ কোয়েরিকে অনুমতি দেয়।
আপনার কোয়েরি পারফর্ম্যান্স ব্যাখ্যা করুন
Cloud Firestore আপনাকে ব্যাকএন্ডে আপনার কোয়েরির পারফর্ম্যান্স পরিমাপ করতে এবং এর পরিবর্তে ব্যাকএন্ড কোয়েরি এক্সিকিউশনে বিস্তারিত পারফর্ম্যান্স পরিসংখ্যান পেতে দেয়।
কোয়েরি ব্যাখ্যা করার ফলাফল আপনাকে বুঝতে সাহায্য করে যে কীভাবে আপনার কোয়েরি কার্যকর করা হয়, আপনাকে অদক্ষতা এবং সম্ভাব্য সার্ভার-সাইড বাধাগুলির অবস্থান দেখায়।
আরও তথ্যের জন্য, কোয়েরি ব্যাখ্যা করার নির্দেশিকা দেখুন।
Standard সংস্করণের কোয়েরি সংক্রান্ত সীমাবদ্ধতা
নিম্নলিখিত তালিকায় Cloud Firestore কোয়েরির সীমাবদ্ধতা সংক্ষেপে উল্লেখ করা হয়েছে। এইসব সীমাবদ্ধতা শুধুমাত্র Standard সংস্করণের ক্ষেত্রে প্রযোজ্য:
- Cloud Firestore,
or,inওarray-contains-anyঅপারেটরের মাধ্যমে লজিক্যালORকোয়েরির জন্য সহায়তা প্রদান করে। এইসব কোয়েরি কোয়েরির ডিসজাঙ্কটিভ নরমাল ফর্মের উপর ভিত্তি করে ৩০টি ডিসজাঙ্কশনে সীমিত। এই সীমা নির্দিষ্ট এবং এটি অ্যাডজাস্ট করা যাবে না। - আপনি প্রতি ডিসজাংশনে (
orগ্রুপ) সর্বাধিক একটিarray-containsক্লজ ব্যবহার করতে পারবেন। আপনি একই ডিসজাংশনেarray-contains-এর সাথেarray-contains-anyএকত্রিত করতে পারবেন না। - আপনি একই কোয়েরিতে
in,array-contains-anyবাor-এর সাথেnot-inএকত্রিত করতে পারবেন না। - প্রতিটি কোয়েরির জন্য শুধুমাত্র একটি
not-inবা!=অনুমোদিত। not-in-এ সর্বাধিক ১০টি তুলনামূলক ভ্যালু ব্যবহার করা যায়।- কোনও কোয়েরিতে ফিল্টার, ক্রমানুসারে সাজানোর সেটিং এবং পেরেন্ট ডকুমেন্ট পাথের (সাবকালেকশনের জন্য ১, রুট কালেকশনের জন্য ০) যোগফল ১০০-এর বেশি হতে পারবে না। কোয়েরির ডিসজাঙ্কটিভ নরমাল ফর্ম-এর ভিত্তিতে এটি গণনা করা হয়।
- কোনও ফিল্ডে অসমতা ফিল্টার সহ কোয়েরি বলতে সেই ফিল্ড অনুযায়ী সাজানো এবং সেই ফিল্ডের অস্তিত্বের জন্য ফিল্টার করা বোঝায়।
ORটি কোয়েরির সীমা
কোনও কোয়েরি যাতে কম্পিউটেশনালভাবে খুব বেশি ব্যয়বহুল না হয়ে যায়,
Cloud Firestore Standard সংস্করণে আপনি কতগুলি AND এবং OR ক্লজ একত্রিত করতে পারবেন তার সীমা নির্ধারণ করে।
এই সীমা প্রয়োগ করতে, Cloud Firestore এমন কোয়েরি কনভার্ট করে যা
লজিক্যাল OR অপারেশন (or, in এবং array-contains-any) থেকে
ডিসজাঙ্কটিভ নরমাল ফর্ম
(AND-এর OR হিসেবেও পরিচিত) পারফর্ম করে। Cloud Firestore ডিসজাঙ্কটিভ নরমাল ফর্মে সর্বাধিক ৩০টি ডিসজাঙ্কশনে
একটি কোয়েরি সীমাবদ্ধ করে।
এই সীমা নির্দিষ্ট এবং এটি অ্যাডজাস্ট করা যাবে না।
ডিসজাঙ্কটিভ নরমাল ফর্ম
Cloud Firestore দুটি নিয়ম প্রয়োগ করে কোয়েরিকে ডিসজাঙ্কটিভ নরমাল ফর্মে রূপান্তরিত করে:
ফ্ল্যাটেন
প্রদত্ত শর্তাবলী
A,B, এবংC:A and (B and C) => A and B and C-
প্রদত্ত শর্ত
A,B,C, এবংD:A and (B or C) => (A and B) or (A and C)(A or B) and (C or D) => (A and C) or (A and D) or (B and C) or (B and D)
in এবং array-contains-any কোয়েরিতে এইসব নিয়ম প্রয়োগ করার সময় মনে রাখবেন যে
এইসব অপারেটর হল OR-এর শর্টহ্যান্ড। যেমন, a in [1,2] হল
a = 1 OR a = 2-এর শর্টহ্যান্ড।
নিম্নলিখিত উদাহরণে বিভিন্ন কোয়েরির জন্য ডিসজাংশনের সংখ্যা দেখানো হয়েছে:
| ক্যোয়ারী | ডিসজাংশনের সংখ্যা |
|---|---|
query(collectionRef, where("a", "==", 1))
|
1 |
query(collectionRef, or( where("a", "==", 1), where("b", "==", 2) ))
|
2 |
query(collectionRef,
or( and( where("a", "==", 1), where("c", "==", 3) ),
and( where("a", "==", 1), where("d", "==", 4) ),
and( where("b", "==", 2), where("c", "==", 3) ),
and( where("b", "==", 2), where("d", "==", 4) )
)
)
|
4 |
query(collectionRef,
and( or( where("a", "==", 1), where("b", "==", 2) ),
or( where("c", "==", 3), where("d", "==", 4) )
)
)
|
4 এই কোয়েরির ডিসজাঙ্কটিভ নরমাল ফর্ম উপরের কোয়েরির সমান। |
query(collectionRef, where("a", "in", [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) )
|
10 |
query(collectionRef,
and( where("a", "in", [1, 2, 3, 4, 5]),
where("b", "in", [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
)
)
|
50 এই কোয়েরি একটি সমস্যা দেখায়, কারণ এটি ৩০টি ডিসজাংশনের সীমা অতিক্রম করে। |
query(collectionRef,
or( where("a", "in", [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]),
where("b", "in", [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
)
)
|
20 |
query(collectionRef,
and( where("a", "in", [1, 2, 3, 4, 5]),
or( where("b", "==", 2),
where("c", "==", 3)
)
)
)
|
10 |
orderBy এবং অস্তিত্ব
আপনি কোনও নির্দিষ্ট ফিল্ডের মাধ্যমে কোয়েরি অর্ডার করলে, কোয়েরি শুধুমাত্র সেইসব ডকুমেন্ট ফেরত দিতে পারে যেখানে অর্ডার-বাই ফিল্ড আছে।
যেমন, নিম্নলিখিত কোয়েরি এমন কোনও ডকুমেন্ট দেখাবে না যেখানে
population ফিল্ড সেট করা নেই, এমনকি সেগুলি কোয়েরি ফিল্টার পূরণ করলেও।
জাভা
db.collection("cities").whereEqualTo("country", “USA”).orderBy(“population”);
অসমতার ক্ষেত্রেও একই ধরনের প্রভাব পড়ে। কোনও ফিল্ডে অসমতা ফিল্টার সহ কোয়েরি
করার অর্থ হল সেই ফিল্ড অনুযায়ী সাজানো। নিম্নলিখিত
কোয়েরি population ফিল্ড ছাড়া ডকুমেন্ট রিটার্ন করে না, এমনকি
সেই ডকুমেন্টে country = USA থাকলেও। বিকল্প হিসেবে, আপনি প্রতিটি অর্ডারের জন্য আলাদা কোয়েরি এক্সিকিউট করতে পারেন অথবা আপনি যে ফিল্ডের ভিত্তিতে অর্ডার করছেন তার সবকটির জন্য একটি ভ্যালু অ্যাসাইন করতে পারেন।
জাভা
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000));
উপরের কোয়েরিতে অসাম্যের উপর একটি অন্তর্নিহিত অর্ডার-বাই অন্তর্ভুক্ত রয়েছে এবং এটি নিম্নলিখিতটির সমতুল্য:
জাভা
db.collection(“cities”).where(or(“country”, USA”), greaterThan(“population”, 250000)).orderBy(“population”);
এর পরে কী করতে হবে
- কীভাবে কোয়েরি ফলাফলে ডেটা সাজাবেন ও সীমিত করবেন তা জানুন।
- আপনি যখন শুধু ফলাফল গণনা করতে চান তখন রিড সেভ করুন।