Cloud Firestore আপনি একটি সংগ্রহ বা সংগ্রহ গোষ্ঠী থেকে কোন নথিগুলি পুনরুদ্ধার করতে চান তা নির্দিষ্ট করার জন্য শক্তিশালী ক্যোয়ারী কার্যকারিতা প্রদান করে৷ এই প্রশ্নগুলি get()
বা addSnapshotListener()
এর সাথেও ব্যবহার করা যেতে পারে, যেমন Get Data এবং Get Realtime Updates- এ বর্ণনা করা হয়েছে।
উদাহরণ ডেটা
শুরু করতে, শহরগুলি সম্পর্কে কিছু ডেটা লিখুন যাতে আমরা এটিকে আবার পড়ার বিভিন্ন উপায় দেখতে পারি:
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"] });
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"] });
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"] ])
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"] }];
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)
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);
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);
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() )
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() )
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")})}, });
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"} } });
সহজ প্রশ্ন
নিম্নলিখিত ক্যোয়ারী রাজ্য CA
সহ সমস্ত শহর ফেরত দেয়:
// 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"));
// Create a reference to the cities collection var citiesRef = db.collection("cities"); // Create a query against the collection. var query = citiesRef.where("state", "==", "CA");
// 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")
// 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"];
// Create a reference to the cities collection val citiesRef = db.collection("cities") // Create a query against the collection. val query = citiesRef.whereEqualTo("state", "CA")
// Create a reference to the cities collection CollectionReference citiesRef = db.collection("cities"); // Create a query against the collection. Query query = citiesRef.whereEqualTo("state", "CA");
// 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");
CollectionReference cities_ref = db->Collection("cities"); // Create a query against the collection. Query query_ca = cities_ref.WhereEqualTo("state", FieldValue::String("CA"));
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)); } });
নিম্নলিখিত ক্যোয়ারী সমস্ত রাজধানী শহর ফেরত দেয়:
import { collection, query, where } from "firebase/firestore"; const citiesRef = collection(db, "cities"); const q = query(citiesRef, where("capital", "==", true));
var citiesRef = db.collection("cities"); var query = citiesRef.where("capital", "==", true);
let capitalCities = db.collection("cities").whereField("capital", isEqualTo: true)
FIRQuery *capitalCities = [[self.db collectionWithPath:@"cities"] queryWhereField:@"capital" isEqualTo:@YES];
val capitalCities = db.collection("cities").whereEqualTo("capital", true)
Query capitalCities = db.collection("cities").whereEqualTo("capital", true);
final capitalcities = db.collection("cities").where("capital", isEqualTo: true);
Query capital_cities = db->Collection("cities").WhereEqualTo( "capital", FieldValue::Boolean(true));
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)); } });
একটি প্রশ্ন চালান
একটি ক্যোয়ারী অবজেক্ট তৈরি করার পরে, ফলাফলগুলি পুনরুদ্ধার করতে get()
ফাংশনটি ব্যবহার করুন:
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()); });
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); });
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)") }
[[[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); } } }];
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) }
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()); } } });
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"), );
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; } });
পিএইচপি
একটি Cloud Firestore ক্লায়েন্ট ইনস্টল এবং তৈরি করার বিষয়ে আরও জানতে, Cloud Firestore ক্লায়েন্ট লাইব্রেরি দেখুন।
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(""); }; });
ক্যোয়ারী ফলাফল পুনরুদ্ধার সম্পর্কে আরও তথ্যের জন্য ডেটা পান দেখুন। আপনি বর্তমান ফলাফল পেতে এবং ভবিষ্যতের আপডেটগুলি শুনতে একটি প্রশ্নের সাথে একজন শ্রোতাকে যুক্ত করতে পারেন৷
ক্যোয়ারী অপারেটর
where()
পদ্ধতিতে তিনটি প্যারামিটার লাগে: ফিল্টার করার জন্য একটি ক্ষেত্র, একটি তুলনা অপারেটর এবং একটি মান। Cloud Firestore নিম্নলিখিত তুলনা অপারেটরগুলিকে সমর্থন করে:
-
<
এর চেয়ে কম -
<=
এর চেয়ে কম বা সমান -
==
সমান -
>
এর চেয়ে বড় -
>=
এর থেকে বড় বা সমান -
!=
সমান নয় -
array-contains
-
array-contains-any
-
in
-
not-in
যেমন:
const stateQuery = query(citiesRef, where("state", "==", "CA")); const populationQuery = query(citiesRef, where("population", "<", 100000)); const nameQuery = query(citiesRef, where("name", ">=", "San Francisco"));
const stateQuery = citiesRef.where("state", "==", "CA"); const populationQuery = citiesRef.where("population", "<", 100000); const nameQuery = citiesRef.where("name", ">=", "San Francisco");
let stateQuery = citiesRef.whereField("state", isEqualTo: "CA") let populationQuery = citiesRef.whereField("population", isLessThan: 100000) let nameQuery = citiesRef.whereField("name", isGreaterThanOrEqualTo: "San Francisco")
FIRQuery *stateQuery = [citiesRef queryWhereField:@"state" isEqualTo:@"CA"]; FIRQuery *populationQuery = [citiesRef queryWhereField:@"population" isLessThan:@100000]; FIRQuery *nameQuery = [citiesRef queryWhereField:@"name" isGreaterThanOrEqualTo:@"San Francisco"];
val stateQuery = citiesRef.whereEqualTo("state", "CA") val populationQuery = citiesRef.whereLessThan("population", 100000) val nameQuery = citiesRef.whereGreaterThanOrEqualTo("name", "San Francisco")
Query stateQuery = citiesRef.whereEqualTo("state", "CA"); Query populationQuery = citiesRef.whereLessThan("population", 100000); Query nameQuery = citiesRef.whereGreaterThanOrEqualTo("name", "San Francisco");
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");
cities_ref.WhereEqualTo("state", FieldValue::String("CA")); cities_ref.WhereLessThan("population", FieldValue::Integer(100000)); cities_ref.WhereGreaterThanOrEqualTo("name", FieldValue::String("San Francisco"));
Query stateQuery = citiesRef.WhereEqualTo("State", "CA"); Query populationQuery = citiesRef.WhereGreaterThan("Population", 1000000); Query nameQuery = citiesRef.WhereGreaterThanOrEqualTo("Name", "San Francisco");
সমান নয় ( !=
)
নট ইকুয়াল ( !=
) অপারেটর ব্যবহার করুন যেখানে প্রদত্ত ক্ষেত্রটি বিদ্যমান রয়েছে এবং তুলনা মানের সাথে মেলে না। যেমন:
const notCapitalQuery = query(citiesRef, where("capital", "!=", false));
citiesRef.where("capital", "!=", false);
let notEqualQuery = citiesRef.whereField("capital", isNotEqualTo: false)
query = [citiesRef queryWhereField:@"capital" isNotEqualTo:@NO];
val notCapitalQuery = citiesRef.whereNotEqualTo("capital", false)
Query notCapitalQuery = citiesRef.whereNotEqualTo("capital", false);
final citiesRef = db.collection("cities"); final notCapitals = citiesRef.where("capital", isNotEqualTo: true);
// Snippet not yet available
cities_ref.WhereNotEqualTo("capital", FieldValue::Boolean(false));
// Snippet not yet available
Query query = citiesRef.WhereNotEqualTo("capital", false); Query query = citiesRef.WhereNotEqualTo("capital", false);
// Snippet not yet available
এই ক্যোয়ারীটি প্রতিটি city
নথি প্রদান করে যেখানে capital
ফিল্ডটি false
বা null
ছাড়া অন্য একটি মান সহ বিদ্যমান। এটি city
নথিগুলি অন্তর্ভুক্ত করে যেখানে capital
ক্ষেত্র মান true
বা null
ব্যতীত অন্য কোনো নন-বুলিয়ান মানের সমান।
এই প্রশ্নটি city
নথিগুলি ফেরত দেয় না যেখানে capital
ক্ষেত্রটি বিদ্যমান নেই৷ নট-ইকুয়াল ( !=
) এবং not-in
কোয়েরি নথিগুলিকে বাদ দেয় যেখানে প্রদত্ত ক্ষেত্রটি বিদ্যমান নেই ।
একটি ক্ষেত্র বিদ্যমান থাকে যখন এটি একটি খালি স্ট্রিং ( ""
), null
, এবং NaN
(কোন সংখ্যা নয়) সহ যেকোনো মানতে সেট করা থাকে। মনে রাখবেন যে null
ফিল্ডের মান মেলে না !=
ক্লজ, কারণ x != null
মূল্যায়ন করে undefined
.
সীমাবদ্ধতা
!=
প্রশ্নগুলির জন্য নিম্নলিখিত সীমাবদ্ধতাগুলি নোট করুন:
- শুধুমাত্র নথি যেখানে প্রদত্ত ক্ষেত্র বিদ্যমান আছে ক্যোয়ারী মেলে.
- আপনি একটি যৌগিক প্রশ্নে
not-in
এবং!=
একত্রিত করতে পারবেন না।
অ্যারে সদস্যপদ
আপনি অ্যারের মানগুলির উপর ভিত্তি করে ফিল্টার করতে array-contains
অপারেটর ব্যবহার করতে পারেন। যেমন:
import { query, where } from "firebase/firestore"; const q = query(citiesRef, where("regions", "array-contains", "west_coast"));
citiesRef.where("regions", "array-contains", "west_coast");
citiesRef .whereField("regions", arrayContains: "west_coast")
[citiesRef queryWhereField:@"state" arrayContains:@"west_coast"];
val citiesRef = db.collection("cities") citiesRef.whereArrayContains("regions", "west_coast")
CollectionReference citiesRef = db.collection("cities"); citiesRef.whereArrayContains("regions", "west_coast");
final citiesRef = db.collection("cities"); final westCoastcities = citiesRef.where("regions", arrayContains: "west_coast");
CollectionReference cities_ref = db->Collection("cities"); cities_ref.WhereArrayContains("region", FieldValue::String("west_coast"));
CollectionReference citiesRef = db.Collection("cities"); Query arrayContainsQuery = citiesRef.WhereArrayContains("region", "west_coast");
এই ক্যোয়ারীটি প্রতিটি city
নথি প্রদান করে যেখানে regions
ক্ষেত্রটি একটি অ্যারে যা west_coast
ধারণ করে। যদি অ্যারেতে আপনি যে মানের প্রশ্ন করেন তার একাধিক দৃষ্টান্ত থাকে, তাহলে নথিটি শুধুমাত্র একবার ফলাফলে অন্তর্ভুক্ত করা হয়।
আপনি সর্বাধিক একটি array-contains
ব্যবহার করতে পারেন- প্রতি বিচ্ছিন্নতা ( or
গোষ্ঠী) ধারা রয়েছে। আপনি একই বিচ্ছিন্নতার মধ্যে array-contains
এর সাথে array-contains-any
একত্রিত করতে পারবেন না।
in
, not-in
, এবং array-contains-any
লজিক্যাল OR
সাথে একই ক্ষেত্রে 30টি পর্যন্ত সমতা ( ==
) ক্লজ একত্রিত করতে in
অপারেটর ব্যবহার করুন। একটি in
কোয়েরি নথি প্রদান করে যেখানে প্রদত্ত ক্ষেত্রটি তুলনামূলক মানগুলির সাথে মেলে। যেমন:
import { query, where } from "firebase/firestore"; const q = query(citiesRef, where('country', 'in', ['USA', 'Japan']));
citiesRef.where('country', 'in', ['USA', 'Japan']);
let citiesRef = db.collection("cities") citiesRef.whereField("country", in: ["USA", "Japan"])
FIRCollectionReference *citiesRef = [self.db collectionWithPath:@"cities"]; [citiesRef queryWhereField:@"country" in:@[@"USA", @"Japan"]];
val citiesRef = db.collection("cities") citiesRef.whereIn("country", listOf("USA", "Japan"))
CollectionReference citiesRef = db.collection("cities"); citiesRef.whereIn("country", Arrays.asList("USA", "Japan"));
final citiesRef = db.collection("cities"); final cities = citiesRef.where("country", whereIn: ["USA", "Japan"]);
CollectionReference cities_ref = db->Collection("cities"); cities_ref.WhereIn("country", std::vector<FieldValue> { FieldValue::String("USA"), FieldValue::String("Japan") });
CollectionReference citiesRef = db.Collection("cities"); ListcountriesList = new List<object>() {"USA", "Japan"}; Query whereInQuery = citiesRef.WhereIn("country", countriesList);
এই প্রশ্নটি প্রতিটি city
নথি প্রদান করে যেখানে country
ক্ষেত্রটি USA
বা Japan
সেট করা আছে। উদাহরণের ডেটা থেকে, এতে SF
, LA
, DC
, এবং TOK
নথি অন্তর্ভুক্ত রয়েছে৷
not-in
লজিক্যাল AND
সাথে একই ক্ষেত্রে 10টি সমান ( !=
) ক্লজ একত্রিত করতে not-in
অপারেটর ব্যবহার করুন। একটি not-in
ক্যোয়ারী নথি প্রদান করে যেখানে প্রদত্ত ক্ষেত্রটি বিদ্যমান, null
নয় এবং তুলনামূলক মানের কোনোটির সাথে মেলে না। যেমন:
import { query, where } from "firebase/firestore"; const q = query(citiesRef, where('country', 'not-in', ['USA', 'Japan']));
citiesRef.where('country', 'not-in', ['USA', 'Japan']);
citiesRef.whereField("country", notIn: ["USA", "Japan"])
[citiesRef queryWhereField:@"country" notIn:@[@"USA", @"Japan"]];
citiesRef.whereNotIn("country", listOf("USA", "Japan"))
citiesRef.whereNotIn("country", Arrays.asList("USA", "Japan"));
final citiesRef = db.collection("cities"); final cities = citiesRef.where("country", whereNotIn: ["USA", "Japan"]);
// Snippet not yet available
cities_ref.WhereNotIn("country", std::vector<FieldValue> { FieldValue::String("USA"), FieldValue::String("Japan") });
// Snippet not yet available
Query query = citiesRef.WhereNotIn(new FieldPath("country"), new List<string>{"USA", "Japan"}); Query query = citiesRef.WhereNotIn("country", new List<object>(){"USA", "Japan"});
// Snippet not yet available
এই ক্যোয়ারীটি প্রতিটি city
নথি প্রদান করে যেখানে country
ক্ষেত্রটি বিদ্যমান এবং USA
, Japan
, বা null
সেট করা নেই। উদাহরণের তথ্য থেকে, এতে London
এবং Hong Kong
নথি অন্তর্ভুক্ত রয়েছে।
not-in
কোয়েরি নথিগুলিকে বাদ দেয় যেখানে প্রদত্ত ক্ষেত্রটি বিদ্যমান নেই। একটি ক্ষেত্র বিদ্যমান থাকে যখন এটি একটি খালি স্ট্রিং ( ""
), null
, এবং NaN
(কোন সংখ্যা নয়) সহ যেকোনো মানতে সেট করা থাকে। উল্লেখ্য যে x != null
মূল্যায়ন করে undefined
. তুলনামূলক মানগুলির একটি হিসাবে null
সহ একটি not-in
কোয়েরি কোনো নথির সাথে মেলে না।
array-contains-any
লজিক্যাল OR
একই ক্ষেত্রের 30 টি পর্যন্ত array-contains
ক্লজগুলি একত্রিত করতে array-contains-any
অপারেটর ব্যবহার করুন। একটি array-contains-any
কোয়েরি নথি প্রদান করে যেখানে প্রদত্ত ক্ষেত্রটি একটি অ্যারে যা এক বা একাধিক তুলনা মান ধারণ করে:
import { query, where } from "firebase/firestore"; const q = query(citiesRef, where('regions', 'array-contains-any', ['west_coast', 'east_coast']));
citiesRef.where('regions', 'array-contains-any', ['west_coast', 'east_coast']);
let citiesRef = db.collection("cities") citiesRef.whereField("regions", arrayContainsAny: ["west_coast", "east_coast"])
FIRCollectionReference *citiesRef = [self.db collectionWithPath:@"cities"]; [citiesRef queryWhereField:@"regions" arrayContainsAny:@[@"west_coast", @"east_coast"]];
val citiesRef = db.collection("cities") citiesRef.whereArrayContainsAny("regions", listOf("west_coast", "east_coast"))
CollectionReference citiesRef = db.collection("cities"); citiesRef.whereArrayContainsAny("regions", Arrays.asList("west_coast", "east_coast"));
final citiesRef = db.collection("cities"); final cities = citiesRef .where("regions", arrayContainsAny: ["west_coast", "east_coast"]);
CollectionReference cities_ref = db->Collection("cities"); cities_ref.WhereArrayContainsAny("region", std::vector<FieldValue> { FieldValue::String("west_coast"), FieldValue::String("east_coast") });
Query query = citiesRef.WhereArrayContainsAny( "regions", new List<object>() { new List<object>(){"west_coast"}, new List<object>(){"east_coast"}});
এই ক্যোয়ারীটি প্রতিটি শহরের ডকুমেন্টকে ফেরত দেয় যেখানে regions
ক্ষেত্রটি এমন একটি অ্যারে যা west_coast
বা east_coast
ধারণ করে। উদাহরণের ডেটা থেকে, এতে SF
, LA
, এবং DC
নথি অন্তর্ভুক্ত রয়েছে৷
array-contains-any
এর ফলাফল ডি-ডুপ করা হয়। এমনকি যদি একটি নথির অ্যারে ক্ষেত্র তুলনামূলক মানগুলির একটির বেশি মেলে, ফলাফল সেটে সেই নথিটি শুধুমাত্র একবারই অন্তর্ভুক্ত থাকে।
array-contains-any
সবসময় অ্যারের ডেটা টাইপ দ্বারা ফিল্টার করে। উদাহরণস্বরূপ, উপরের ক্যোয়ারীটি একটি শহরের নথি প্রদান করবে না যেখানে একটি অ্যারের পরিবর্তে, regions
ক্ষেত্রটি স্ট্রিং west_coast
।
আপনি in
একটি তুলনা মান হিসাবে একটি অ্যারে মান ব্যবহার করতে পারেন, কিন্তু array-contains-any
বিপরীতে, ধারাটি অ্যারের দৈর্ঘ্য, ক্রম এবং মানগুলির সঠিক মিলের জন্য মেলে। যেমন:
import { query, where } from "firebase/firestore"; const q = query(citiesRef, where('regions', 'in', [['west_coast'], ['east_coast']]));
citiesRef.where('regions', 'in', [['west_coast'], ['east_coast']]);
citiesRef.whereField("regions", in: [["west_coast"], ["east_coast"]])
[citiesRef queryWhereField:@"regions" in:@[@[@"west_coast"], @[@"east_coast"]]];
citiesRef.whereIn("regions", listOf(arrayOf("west_coast"), arrayOf("east_coast")))
citiesRef.whereIn("regions", Arrays.asList(new String[]{"west_coast"}, new String[]{"east_coast"}));
final citiesRef = db.collection("cities"); final cities = citiesRef.where("regions", whereIn: [ ["west_coast"], ["east_coast"] ]);
cities_ref.WhereIn("region", std::vector<FieldValue> { FieldValue::String("west_coast"), FieldValue::String("east_coast") });
Query query = citiesRef.WhereIn(new FieldPath("regions"), new List<string>{"west_coast", "east_coast"});
এই ক্যোয়ারীটি প্রতিটি শহরের নথি প্রদান করে যেখানে regions
ক্ষেত্রটি একটি অ্যারে যা west_coast
বা east_coast
ঠিক একটি উপাদান ধারণ করে। উদাহরণের তথ্য থেকে, শুধুমাত্র DC
নথিটি তার ["east_coast"]
regions
ক্ষেত্রের সাথে যোগ্যতা অর্জন করে। SF
নথিটি অবশ্য মেলে না কারণ এর regions
ক্ষেত্র হল ["west_coast", "norcal"]
।
সীমাবদ্ধতা
in
, not-in
, এবং array-contains-any
জন্য নিম্নলিখিত সীমাবদ্ধতাগুলি নোট করুন:
- Cloud Firestore লজিক্যাল
OR
কোয়েরির জন্যor
,in
, এবংarray-contains-any
অপারেটরের মাধ্যমে সমর্থন প্রদান করে। এই ক্যোয়ারীগুলি ক্যোয়ারী এর ডিসজংক্টিভ নরমাল ফর্মের উপর ভিত্তি করে 30 টি ডিসজেকশনের মধ্যে সীমাবদ্ধ। - আপনি সর্বাধিক একটি
array-contains
ব্যবহার করতে পারেন- প্রতি বিচ্ছিন্নতা (or
গোষ্ঠী) ধারা রয়েছে। আপনি একই বিচ্ছিন্নতার মধ্যেarray-contains
এর সাথেarray-contains-any
একত্রিত করতে পারবেন না। - আপনি
not-in
সাথে not equals!=
সাথে একত্রিত করতে পারবেন না। -
not-in
10টি পর্যন্ত তুলনা মান সমর্থন করে।
যৌগিক ( AND
) প্রশ্ন
আপনি একাধিক সমতা অপারেটর ( ==
বা array-contains
) চেইন করে একটি লজিক্যাল AND
এর সাথে সীমাবদ্ধতাগুলি একত্রিত করতে পারেন। যাইহোক, অসমতা অপারেটর, <
, <=
, >
, এবং !=
সাথে সমতা অপারেটরকে একত্রিত করতে আপনাকে অবশ্যই একটি যৌগিক সূচক তৈরি করতে হবে।
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));
const q1 = citiesRef.where("state", "==", "CO").where("name", "==", "Denver"); const q2 = citiesRef.where("state", "==", "CA").where("population", "<", 1000000);
citiesRef .whereField("state", isEqualTo: "CO") .whereField("name", isEqualTo: "Denver") citiesRef .whereField("state", isEqualTo: "CA") .whereField("population", isLessThan: 1000000)
[[citiesRef queryWhereField:@"state" isEqualTo:@"CO"] queryWhereField:@"name" isGreaterThanOrEqualTo:@"Denver"]; [[citiesRef queryWhereField:@"state" isEqualTo:@"CA"] queryWhereField:@"population" isLessThan:@1000000];
citiesRef.whereEqualTo("state", "CO").whereEqualTo("name", "Denver") citiesRef.whereEqualTo("state", "CA").whereLessThan("population", 1000000)
citiesRef.whereEqualTo("state", "CO").whereEqualTo("name", "Denver"); citiesRef.whereEqualTo("state", "CA").whereLessThan("population", 1000000);
final citiesRef = db.collection("cities"); citiesRef .where("state", isEqualTo: "CO") .where("name", isEqualTo: "Denver"); citiesRef .where("state", isEqualTo: "CA") .where("population", isLessThan: 1000000);
cities_ref.WhereEqualTo("state", FieldValue::String("CO")) .WhereEqualTo("name", FieldValue::String("Denver")); cities_ref.WhereEqualTo("state", FieldValue::String("CA")) .WhereLessThan("population", FieldValue::Integer(1000000));
Query chainedQuery = citiesRef .WhereEqualTo("State", "CA") .WhereEqualTo("Name", "San Francisco");
OR
প্রশ্ন
আপনি একটি লজিক্যাল OR
সাথে সীমাবদ্ধতাগুলিকে একত্রিত করতে পারেন। যেমন:
const q = query(citiesRef, or(where('capital', '==', true), where('population', '>=', 1000000) ) );
পাওয়া যায় না।
let query = db.collection("cities").whereFilter(Filter.orFilter([ Filter.whereField("capital", isEqualTo: true), Filter.whereField("population", isGreaterThanOrEqualTo: 1000000); ]))
FIRCollectionReference *collection = [self.db collectionWithPath:@"cities"]; FIRQuery *query = [collection queryWhereFilter:[FIRFilter orFilterWithFilters:@[ [FIRFilter filterWhereField:@"capital" isEqualTo:@YES], [FIRFilter filterWhereField:@"population" isGreaterThanOrEqualTo:@1000000] ]]];
val query = collection.where(Filter.or( Filter.equalTo("capital", true), Filter.greaterThanOrEqualTo("population", 1000000) ))
Query query = collection.where(Filter.or( Filter.equalTo("capital", true), Filter.greaterThanOrEqualTo("population", 1000000) ));
var query = db.collection("cities").where( Filter.or( Filter("capital", isEqualTo: true), Filter("population", isGreaterThan: 1000000), ), );
স্নিপেট উপলব্ধ নয়।
স্নিপেট উপলব্ধ নয়।
স্নিপেট উপলব্ধ নয়।
const bigCities = await citiesRef .where( Filter.or( Filter.where('capital', '==', true), Filter.where('population', '>=', 1000000) ) ) .get();
স্নিপেট উপলব্ধ নয়।
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)); } });
স্নিপেট উপলব্ধ নয়।
স্নিপেট উপলব্ধ নয়।
Cloud Firestore আপনার কম্পোজিট ইনডেক্স ব্যবহার করে OR
কোয়েরি পরিবেশন করে। যদি আপনার সূচীগুলি ক্যোয়ারী সমর্থন না করে, তাহলে Cloud Firestore আপনার ডাটাবেসের জন্য অতিরিক্ত সূচী প্রস্তাব করে ৷
আপনি OR
এবং AND
ক্রিয়াকলাপগুলির সংমিশ্রণে ফিল্টার করতে যৌগিক প্রশ্নের সাথে OR
প্রশ্নগুলিকে একত্রিত করতে পারেন। যেমন:
const q = query(collection(db, "cities"), and( where('state', '==', 'CA'), or( where('capital', '==', true), where('population', '>=', 1000000) ) ));
পাওয়া যায় না।
let query = db.collection("cities").whereFilter(Filter.andFilter([ Filter.whereField("state", isEqualTo: "CA"), Filter.orFilter([ Filter.whereField("capital", isEqualTo: true), Filter.whereField("population", isGreaterThanOrEqualTo: 1000000) ]) ]))
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] ]] ]]];
val query = collection.where(Filter.and( Filter.equalTo("state", "CA"), Filter.or( Filter.equalTo("capital", true), Filter.greaterThanOrEqualTo("population", 1000000) ) ))
Query query = collection.where(Filter.and( Filter.equalTo("state", "CA"), Filter.or( Filter.equalTo("capital", true), Filter.greaterThanOrEqualTo("population", 1000000) ) ));
var query = db.collection("cities").where( Filter.and( Filter("state", isEqualTo: "CA"), Filter.or( Filter("capital", isEqualTo: true), Filter("population", isGreaterThan: 1000000), ), ), );
স্নিপেট উপলব্ধ নয়।
স্নিপেট উপলব্ধ নয়।
স্নিপেট উপলব্ধ নয়।
স্নিপেট উপলব্ধ নয়।
const bigCitiesInCalifornia = await citiesRef .where('state', '==', 'CA') .where( Filter.or( Filter.where('capital', '==', true), Filter.where('population', '>=', 1000000) ) ) .get();
স্নিপেট উপলব্ধ নয়।
স্নিপেট উপলব্ধ নয়।
Query query = citiesRef.Where(Filter.And( Filter.EqualTo("state", "CA"), Filter.Or( Filter.EqualTo("capital", true), Filter.GreaterThanOrEqualTo("population", 1000000) ) ));
স্নিপেট উপলব্ধ নয়।
স্নিপেট উপলব্ধ নয়।
সীমাবদ্ধতা
নিম্নলিখিত সীমাবদ্ধতাগুলি or
প্রশ্নের জন্য নোট করুন:
- Cloud Firestore একটি ক্যোয়ারীকে সীমাবদ্ধ করে সর্বোচ্চ 30টি ডিসজেকশনের মধ্যে কোয়েরির ডিসজংক্টিভ নরমাল ফর্মের উপর ভিত্তি করে । একাধিক
OR
গোষ্ঠীর একটিAND
সম্পাদন করার সময় আপনার এই সীমাতে পৌঁছানোর সম্ভাবনা বেশি। - আপনি
not-in
এর সাথেin
,array-contains-any
,or
একই ক্যোয়ারীতে একত্রিত করতে পারবেন না৷
সীমাবদ্ধতার সম্পূর্ণ বিবরণের জন্য, ক্যোয়ারী সীমাবদ্ধতা দেখুন।
সংগ্রহ গ্রুপ প্রশ্ন
একটি সংগ্রহ গ্রুপ একই আইডি সহ সমস্ত সংগ্রহ নিয়ে গঠিত। ডিফল্টরূপে, প্রশ্নগুলি আপনার ডাটাবেসের একটি একক সংগ্রহ থেকে ফলাফল পুনরুদ্ধার করে। একক সংগ্রহের পরিবর্তে একটি সংগ্রহ গোষ্ঠী থেকে নথি পুনরুদ্ধার করতে একটি সংগ্রহ গোষ্ঠী ক্যোয়ারী ব্যবহার করুন৷
উদাহরণস্বরূপ, আপনি প্রতিটি শহরে একটি ল্যান্ডমার্ক সাব-কলেকশন যোগ করে একটি landmarks
সংগ্রহ গ্রুপ তৈরি করতে পারেন:
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' }) ]);
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' }) ]);
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)
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];
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)
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);
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);
// 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;
}
});
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;
আমরা একটি একক শহরের landmarks
উপ-সংগ্রহের জন্য আগে বর্ণিত সহজ এবং যৌগিক ক্যোয়ারী ব্যবহার করতে পারি, তবে আপনি প্রতিটি শহরের landmarks
উপ-সংগ্রহ থেকে একবারে ফলাফল পুনরুদ্ধার করতে চাইতে পারেন।
landmarks
সংগ্রহ গ্রুপে আইডি landmarks
সহ সমস্ত সংগ্রহ রয়েছে এবং আপনি একটি সংগ্রহ গ্রুপ ক্যোয়ারী ব্যবহার করে এটি অনুসন্ধান করতে পারেন। উদাহরণ স্বরূপ, এই সংগ্রহের গ্রুপ কোয়েরিটি সমস্ত শহর জুড়ে সমস্ত museum
ল্যান্ডমার্ক পুনরুদ্ধার করে:
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()); });
var museums = db.collectionGroup('landmarks').where('type', '==', 'museum'); museums.get().then((querySnapshot) => { querySnapshot.forEach((doc) => { console.log(doc.id, ' => ', doc.data()); }); });
db.collectionGroup("landmarks").whereField("type", isEqualTo: "museum").getDocuments { (snapshot, error) in // ... }
[[[self.db collectionGroupWithID:@"landmarks"] queryWhereField:@"type" isEqualTo:@"museum"] getDocumentsWithCompletion:^(FIRQuerySnapshot *snapshot, NSError *error) { // ... }];
db.collectionGroup("landmarks").whereEqualTo("type", "museum").get() .addOnSuccessListener { queryDocumentSnapshots -> // ... }
db.collectionGroup("landmarks").whereEqualTo("type", "museum").get() .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() { @Override public void onSuccess(QuerySnapshot queryDocumentSnapshots) { // ... } });
db .collectionGroup("landmarks") .where("type", isEqualTo: "museum") .get() .then( (res) => print("Successfully completed"), onError: (e) => print("Error completing: $e"), );
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;
}
});
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)); } });
একটি সংগ্রহ গ্রুপ ক্যোয়ারী ব্যবহার করার আগে, আপনাকে অবশ্যই একটি সূচী তৈরি করতে হবে যা আপনার সংগ্রহ গোষ্ঠীর ক্যোয়ারী সমর্থন করে। আপনি একটি ত্রুটি বার্তা, কনসোল বা Firebase CLI এর মাধ্যমে একটি সূচক তৈরি করতে পারেন ।
ওয়েব এবং মোবাইল SDK-এর জন্য, আপনাকে অবশ্যই এমন নিয়মগুলি তৈরি করতে হবে যা আপনার সংগ্রহ গোষ্ঠীর প্রশ্নগুলিকে অনুমতি দেয় ৷
আপনার প্রশ্নের কর্মক্ষমতা ব্যাখ্যা করুন
Cloud Firestore আপনাকে ব্যাকএন্ডে আপনার প্রশ্নের কর্মক্ষমতা পরিমাপ করতে এবং বিনিময়ে ব্যাকএন্ড ক্যোয়ারী সম্পাদনের বিস্তারিত কর্মক্ষমতা পরিসংখ্যান পেতে দেয়।
ক্যোয়ারী ব্যাখ্যা ফলাফল আপনাকে বুঝতে সাহায্য করে কিভাবে আপনার প্রশ্নগুলি কার্যকর করা হয়, আপনাকে অদক্ষতা এবং সম্ভাব্য সার্ভার-সাইড বাধাগুলির অবস্থান দেখায়৷
আরও তথ্যের জন্য, ক্যোয়ারী ব্যাখ্যার জন্য গাইড দেখুন।
প্রশ্ন সীমাবদ্ধতা
নিম্নলিখিত তালিকাটি Cloud Firestore ক্যোয়ারী সীমাবদ্ধতাগুলিকে সংক্ষিপ্ত করে:
- Cloud Firestore লজিক্যাল
OR
কোয়েরির জন্যor
,in
, এবংarray-contains-any
অপারেটরের মাধ্যমে সমর্থন প্রদান করে। এই ক্যোয়ারীগুলি ক্যোয়ারী এর ডিসজংক্টিভ নরমাল ফর্মের উপর ভিত্তি করে 30 টি ডিসজেকশনের মধ্যে সীমাবদ্ধ। - আপনি সর্বাধিক একটি
array-contains
ব্যবহার করতে পারেন- প্রতি বিচ্ছিন্নতা (or
গোষ্ঠী) ধারা রয়েছে। আপনি একই বিচ্ছিন্নতার মধ্যেarray-contains
এর সাথেarray-contains-any
একত্রিত করতে পারবেন না। - আপনি
not-in
এর সাথেin
,array-contains-any
,or
একই ক্যোয়ারীতে একত্রিত করতে পারবেন না৷ - শুধুমাত্র একটি
not-in
বা!=
প্রতি ক্যোয়ারী অনুমোদিত। -
not-in
10টি পর্যন্ত তুলনা মান সমর্থন করে। - একটি ক্যোয়ারীতে ফিল্টার, সাজানোর অর্ডার, এবং প্যারেন্ট ডকুমেন্ট পাথের যোগফল (একটি উপ-সংগ্রহের জন্য 1, একটি রুট সংগ্রহের জন্য 0) 100-এর বেশি হতে পারে না। এটি ক্যোয়ারীটির বিচ্ছিন্ন স্বাভাবিক ফর্মের উপর ভিত্তি করে গণনা করা হয়।
- একটি ক্ষেত্রে একটি অসমতা ফিল্টার সহ একটি ক্যোয়ারী সেই ক্ষেত্রের দ্বারা ক্রম এবং সেই ক্ষেত্রের অস্তিত্বের জন্য ফিল্টারগুলিকে বোঝায়৷
OR
প্রশ্নে সীমাবদ্ধতা
একটি প্রশ্ন যাতে গণনাগতভাবে ব্যয়বহুল হয়ে না যায় তার জন্য, Cloud Firestore আপনি কতগুলি AND
এবং OR
ধারাগুলি একত্রিত করতে পারেন তা সীমাবদ্ধ করে৷ এই সীমাটি প্রয়োগ করার জন্য, Cloud Firestore এমন প্রশ্নগুলিকে রূপান্তরিত করে যা লজিক্যাল OR
ক্রিয়াকলাপ সম্পাদন করে ( or
, in
, এবং array-contains-any
) ডিসজংক্টিভ নরমাল ফর্মে (এছাড়াও AND
গুলির একটি OR
হিসাবে পরিচিত)৷ Cloud Firestore ডিসজংক্টিভ নরমাল ফর্মে একটি ক্যোয়ারীকে সর্বাধিক 30টি ডিসজেকশনে সীমাবদ্ধ করে।
বিচ্ছিন্ন স্বাভাবিক ফর্ম
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 এই ক্যোয়ারীটি একটি ত্রুটি প্রদান করে, কারণ এটি 30টি বিচ্ছিন্নতার সীমা অতিক্রম করে। |
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”);
এরপর কি
- ক্যোয়ারী ফলাফলে ডেটা অর্ডার এবং সীমাবদ্ধ করার পদ্ধতি শিখুন।
- আপনি যখন কেবল ফলাফল গণনা করতে চান তখন পড়াগুলি সংরক্ষণ করুন।