2017-10-04 13 views
7

क्या के साथ एक विशिष्ट स्ट्रिंग के साथ सभी दस्तावेज़ प्राप्त करने के लिए फायरस्टोर संग्रह से पूछना संभव है?फायरस्टोर क्वेरी दस्तावेज़ शुरू होता है एक स्ट्रिंग के साथ

मैं प्रलेखन के माध्यम से चला गया है लेकिन इसके लिए कोई उपयुक्त क्वेरी नहीं है।

उत्तर

9

आप यह कर सकते हैं लेकिन यह मुश्किल है। आपको इच्छित स्ट्रिंग से अधिक या उसके बराबर दस्तावेजों की खोज करने की आवश्यकता है और उत्तराधिकारी कुंजी से कम।

उदाहरण के लिए, एक क्षेत्र 'foo' युक्त 'bar' साथ घूर आप क्वेरी होगा दस्तावेजों को खोजने के लिए:

db.collection(c) 
    .where('foo', '>=', 'bar') 
    .where('foo', '<', 'bas'); 

यह वास्तव में एक तकनीक हम एक रास्ता मिलान दस्तावेजों की स्कैनिंग संग्रह के लिए ग्राहक कार्यान्वयन में इस्तेमाल करते हैं। हमारे successor key computation को scanner द्वारा बुलाया जाता है जो वर्तमान उपयोगकर्ता आईडी से शुरू होने वाली सभी कुंजियों की तलाश में है।

+0

उत्तराधिकारी कुंजी का उपयोग क्या है? –

+0

उत्तराधिकारी कुंजी क्वेरी को बाध्य करती है जैसे परिणामों में केवल एक विशिष्ट स्ट्रिंग से शुरू होने वाली स्ट्रिंग होती है। इसके बिना केवल foo> = 'bar' के लिए खोज करने से 'चिड़ियाघर' वापस आ जाएगा क्योंकि यह स्ट्रिंग भी बार से अधिक शब्दावली से अधिक है। –

6

जैसा कि गिल गिल्बर्ट ने उत्तर दिया था। बस एक वृद्धि और कुछ नमूना कोड। उपयोग String.fromCharCode और String.charCodeAt

var strSearch = "start with text here"; 
var strlength = strSearch.length; 
var strFrontCode = strSearch.slice(0, strlength-1); 
var strEndCode = strSearch.slice(strlength-1, strSearch.length); 

var startcode = strSearch; 
var endcode= strFrontCode + String.fromCharCode(strEndCode.charCodeAt(0) + 1); 

तो नीचे की तरह कोड को फ़िल्टर।

db.collection(c) 
.where('foo', '>=', startcode) 
.where('foo', '<', endcode); 

किसी भी भाषा और किसी यूनिकोड पर काम करता है।

चेतावनी: फायरस्टोर में सभी खोज मानदंड मामला संवेदनात्मक है।

+0

क्या यह एक ही दस्तावेज़ में एक या दो से अधिक फ़ील्ड करना संभव है। पसंद: 'कहाँ (' foo ','> = ', startcode)। कहीं (' foo ',' <', endcode)। कहीं (' बार ',' <', endcode)। कहीं (' बार, '< ', एंडकोड); ' – Erik

+0

शायद यह हिट करेगा [इसके अतिरिक्त, आप केवल एक ही फ़ील्ड पर रेंज तुलना (<, <=, >,> =) कर सकते हैं] (https://firebase.google.com/docs/firestore/query-data/क्वेरी) – Erik

संबंधित मुद्दे