database - तार्किक या क्लाउड फायरस्टार में यौगिक प्रश्नों को कैसे करें?




firebase google-cloud-platform (4)

अभी हमारे पास एक ही समस्या है, सौभाग्य से हमारे लिए एकमात्र संभव मान ए, बी, सी, डी (4) हैं, इसलिए हमें ए || बी, ए, सी, ए || बी जैसी चीजों के लिए क्वेरी करनी होगी। सी, डी, आदि

जैसे कुछ महीने पहले फायरबेस एक नई क्वेरी array-contains इसलिए हम जो करते हैं वह एक एरे बनाते हैं और हम ऑरे को मानों को प्री-प्रोसेस करते हैं।

if (a) {
array addObject:@"a"
}
if (b) {
array addObject:@"b"
}
if (a||b) {
array addObject:@"a||b"
}
etc

और हम यह सब 4! लिए करते हैं 4! मूल्यों या हालांकि कई combos हैं।

जब हम केवल क्वेरी [document arrayContains:@"a||c"] या जो भी प्रकार की शर्त की आवश्यकता हो, की जाँच कर सकते हैं।

इसलिए अगर कुछ केवल हमारे 4 सशर्त (ए, बी, सी, डी) के सशर्त A के लिए योग्य है, तो उसके सरणी में निम्नलिखित शाब्दिक तार शामिल होंगे: @["A", "A||B", "A||C", "A||D", "A||B||C", "A||B||D", "A||C||D", "A||B||C||D"]

फिर उन सभी संयोजनों array-contains से जो भी हम चाहते हैं उस पर केवल array-contains कर सकते हैं (उदाहरण के लिए "ए || सी")

नोट: यह केवल एक उचित दृष्टिकोण है यदि आपके पास तुलना करने या साथ करने के लिए कुछ संभावित मूल्य हैं।

एरे पर अधिक जानकारी यहाँ है , क्योंकि यह डॉब फायर करने के लिए नया है

डॉक्स से :

आप कई श्रृंखलाएँ भी बना सकते हैं जहाँ () विधियाँ अधिक विशिष्ट प्रश्न बनाने के लिए हैं (तार्किक और)।

मैं एक OR क्वेरी कैसे कर सकता हूं? उदाहरण:

  1. मुझे वे सभी दस्तावेज़ दें जहाँ फ़ील्ड की status open या upcoming
  2. मुझे उन सभी दस्तावेज़ों को दें जहाँ फ़ील्ड की status == open या createdAt <= <somedatetime>

आप rxjs मर्ज ऑपरेटर का उपयोग करके दो वेधशालाओं को बांध सकते हैं। यहाँ आपके पास एक उदाहरण है।

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/merge';

...

getCombinatedStatus(): Observable<any> {
   return Observable.merge(this.db.collection('foo', ref => ref.where('status','==','open')).valueChanges(),
                           this.db.collection('foo', ref => ref.where('status','==','upcoming')).valueChanges());
}

फिर आप उपरोक्त विधि का उपयोग करके नए अवलोकन योग्य अपडेट प्राप्त कर सकते हैं:

getCombinatedStatus.subscribe(results => console.log(results);

मुझे आशा है कि यह आपकी मदद कर सकता है, चिली से शुभकामनाएं !!


स्थिति के लिए मूल्य देने का सुझाव दें।
पूर्व।

{ name: "a", statusValue = 10, status = 'open' }

{ name: "b", statusValue = 20, status = 'upcoming'}

{ name: "c", statusValue = 30, status = 'close'}

आप ref.where('statusValue', '<=', 20) द्वारा क्वेरी कर सकते हैं ref.where('statusValue', '<=', 20) फिर 'a' और 'b' दोनों मिल जाएंगे।

यह आपकी क्वेरी लागत और प्रदर्शन को बचा सकता है।

btw, यह सब मामला ठीक नहीं है।


OR इसका समर्थन नहीं किया जाता क्योंकि सर्वर के लिए इसे स्केल करना मुश्किल होता है (इसके लिए स्टेट को कम करने की आवश्यकता होती है)। आसपास का काम 2 प्रश्नों को जारी करना है, प्रत्येक स्थिति के लिए एक है, और क्लाइंट पर कटौती करना है।







google-cloud-firestore