2016-01-23 16 views
15

tôi đã tạo ra một cơ sở dữ liệu trong căn cứ hỏa lực mà trông giống như:"lỗi": "Index không được định nghĩa, thêm" .indexOn"

database structure

Bây giờ tôi đi vào một khách hàng REST và hành truy vấn này:

https://movielens3.firebaseio.com/movieLens/users.json?orderBy="age"&startAt=25&print=pretty 

Nó mang lại cho tôi một lỗi:

"error": "Index not defined, add ".indexOn": "age", for path "/movieLens/users", to the rules" 

Vì vậy, tôi đi trong phần quy tắc và xác định Rul này e:

{ 
    "rules": { 
     "users" : { 
      ".indexOn": ["age", "gender", "occupation", "zipCode"] 
     }, 
     ".read": true, 
     ".write": true 
    } 
} 

Nhưng tôi vẫn gặp lỗi tương tự.

Trả lời

14

Bạn đang xác định chỉ mục cho /users. Không có nút con nào users thẳng dưới gốc cây của bạn, vì vậy các chỉ mục đó sẽ trống.

Bạn đang truy vấn /movieLens/users, vì vậy đó là nơi mà các chỉ số cần được xác định:

{ 
    "rules": { 
     "movieLens": { 
      "users" : { 
       ".indexOn": ["age", "gender", "occupation", "zipCode"] 
      }, 
      ".read": true, 
      ".write": true 
     } 
    } 
} 

Cập nhật cho vấn đề trong các ý kiến:

Bạn đang lưu trữ tuổi của người sử dụng như là một chuỗi, do đó không thể lọc chúng dưới dạng số. Giải pháp là sửa dữ liệu của bạn và lưu trữ dưới dạng số.

Nhưng trong khi chờ đợi câu hỏi này phần nào hoạt động:

https://movielens3.firebaseio.com/movieLens/users.json?orderBy="age"&equalTo="35" 

Trong JavaScript:

ref 
    .orderByChild('age') 
    .startAt('35') 
    .limitToFirst(3) 
    .once('value', function(s) { 
    console.log(JSON.stringify(s.val(), null, ' ')); 
    }, function(error) { 
    if(error) console.error(error); 
    }) 

Các "hơi" được rằng nó là một loại từ vựng, không phải là một số. Sửa dữ liệu cho giải pháp thực.

Lưu ý rằng bạn cũng bỏ qua các phương pháp hay nhất về Firebase bằng cách lưu trữ dữ liệu dưới dạng mảng. Điều này đã gây ra vấn đề cho tôi trong API REST, đó là lý do tại sao tôi đã xóa print=pretty. Tôi cao khuyên bạn nên đọc Firebase programming guide for JavaScript developers từ đầu đến cuối và làm theo lời khuyên trong đó. Vài giờ mà sẽ mất bây giờ, sẽ ngăn chặn nhiều giờ của vấn đề xuống dòng.

+1

giải quyết vấn đề nhưng truy vấn 'https://movielens3.firebaseio.com/movieLens/users.json?orderBy=" tuổi "& startAt = 25 & print = pretty' không lọc bất kỳ điều gì. nó trả về tất cả các bản ghi –

+1

Bạn đang lưu trữ tuổi của bạn dưới dạng một chuỗi. Không phải là một ý tưởng tốt. Tôi cũng sẽ * nghiêm túc * xem xét việc tạo các chỉ mục tùy chỉnh (chỉ các danh sách tra cứu mà bạn duy trì), bởi vì bạn sẽ gặp phải các vấn đề về hiệu suất một cách nhanh chóng mà không có các chỉ mục đó. Xem bài đăng trên blog này: https://www.firebase.com/blog/2013-04-12-denormalizing-is-normal.html và bài viết này: https://highlyscalable.wordpress.com/2012/03/01/ kỹ thuật mô hình hóa dữ liệu nosql / –

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