2017-10-04 20 views

Trả lời

9

Bạn có thể nhưng nó khó khăn. Bạn cần phải tìm kiếm các tài liệu lớn hơn hoặc bằng chuỗi bạn muốn và ít hơn một khóa kế thừa.

Ví dụ, để tìm các tài liệu có chứa một lĩnh vực 'foo' nhìn chằm chằm với 'bar' bạn sẽ truy vấn:

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

Đây thực sự là một kỹ thuật chúng tôi sử dụng trong việc thực hiện khách hàng cho bộ sưu tập quét các văn bản phù hợp với một con đường. successor key computation của chúng tôi được gọi bằng số scanner đang tìm tất cả các khóa bắt đầu bằng id người dùng hiện tại.

+0

Việc sử dụng khóa kế thừa là gì? –

+0

Phím kế thừa giới hạn truy vấn sao cho kết quả chỉ chứa các chuỗi bắt đầu bằng một chuỗi cụ thể. Nếu không có nó tìm kiếm chỉ foo> = 'bar' cũng sẽ trở lại 'sở thú' kể từ khi chuỗi đó cũng lexicographically lớn hơn thanh. –

6

giống như trả lời của Gil Gilbert. Chỉ cần tăng cường và một số mã mẫu. sử dụng String.fromCharCodeString.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); 

sau đó lọc mã như dưới đây.

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

Hoạt động trên mọi ngôn ngữ và bất kỳ Unicode nào.

Cảnh báo: tất cả tiêu chí tìm kiếm trong firestore là SỰ CHẤP NHẬN TRƯỜNG HỢP.

+0

Có thể thực hiện điều này một hoặc hai trường trong cùng một tài liệu. Giống như: 'where ('foo', '> =', startcode). Where ('foo', '<', endcode) .địa chỉ ('bar', '<', endcode). Where ('bar,' < ', endcode); ' – Erik

+0

Có thể điều này sẽ xảy ra [Ngoài ra, bạn chỉ có thể thực hiện so sánh phạm vi (<, <=, >,> =) trên một trường duy nhất] (https://firebase.google.com/docs/firestore/query-data /truy vấn) – Erik

Các vấn đề liên quan