2013-06-17 28 views
7

Tôi đang làm việc với cơ sở dữ liệu vị trí trong CouchDB. Tôi đã tạo chế độ xem trong đó khóa của tôi là một mảng có các giá trị được làm tròn theo vĩ độ và kinh độ. Bây giờ tôi đang chọn với các điều kiện sau:Làm thế nào chính xác là chìa khóa bắt đầu và chìa khóa làm việc trong CouchDB?

Startkey: [ 52.34, 4.883 ] 
Endkey: [ 52.37, 4.903 ] 

Ở đây tôi hy vọng rằng tôi sẽ chỉ nhận tài liệu ở vĩ độ từ 52,34 đến 52,37. Và kinh độ giữa 4.883 và 4.903.

Kết quả tôi nhận được:

[ 52.358, 4.919 ] 
[ 52.358, 4.919 ] 
[ 52.362, 4.861 ] 
[ 52.362, 4.861 ] 
[ 52.362, 4.861 ] 

Như bạn có thể ghi chú khác, trong kết quả đầu tiên là kinh độ lớn hơn thì kinh độ của endkey, 4,919.

Bây giờ tôi biết/đọc ở đâu đó mà tôi sẽ nhận được một số giá trị nằm ngoài phạm vi của mục thứ hai trong mảng. Nhưng làm thế nào có thể là mặt hàng đầu tiên đã không phù hợp với tiêu chí?

Tôi đã tìm kiếm một chút và tôi không thể tìm thấy giải thích về khóa khởi động/khóa kết thúc dưới dạng mảng. Ai có thể cho tôi một lời giải thích về cách CouchDB lặp qua các tài liệu và định nghĩa khi nào 'bắt đầu' và khi nào 'kết thúc'?

+0

Truy vấn 2 chiều không được hỗ trợ lần cuối tôi biết (vì vậy các truy vấn của bạn sẽ không hoạt động). Nhiều người sử dụng GeoCouch (https://github.com/couchbase/geocouch/). – WiredPrairie

+0

Bạn đang nói rằng Couch sẽ bỏ qua phần tử thứ hai trong mảng? – Lumocra

+0

Truy vấn 2 chiều không được hỗ trợ, vì vậy tôi cho rằng bạn có thể xem xét rằng "bỏ qua". – WiredPrairie

Trả lời

15

giả định các dữ liệu sau đây theo quan điểm của bạn với các phím:

startkey == [a, 11]endkey == [c, 11]:

[a, 10] 
[a, 11] <-- startkey 
[a, 12] <-- 
[b, 10] <-- 
[b, 11] <-- 
[b, 12] <-- 
[c, 10] <-- 
[c, 11] <-- endkey 
[c, 12] 

(Tất cả những gì đánh dấu bằng một mũi tên sẽ được trả lại).

Dữ liệu trong chế độ xem được sắp xếp bằng cách sử dụng phím. Với startkeyendkey bạn có thể kiểm soát nơi để bắt đầukết thúc trong chế độ xem. Bạn không thể chỉ định các ràng buộc cho dữ liệu. Mọi thứ được sắp xếp ở giữa startkeyendkey sẽ được trả lại. Vui lòng đọc http://wiki.apache.org/couchdb/View_collation để biết thêm thông tin.

Nếu bạn muốn thực hiện các truy vấn không gian địa lý, bạn nên kiểm tra GeoCouch (https://github.com/couchbase/geocouch/).


Tổng kết: Các phím trong chế độ xem CouchDB được lưu trữ trong danh sách một chiều. Các mục nhập trong các danh sách này được sắp xếp theo các quy tắc trong View_collation. Các mảng hai chiều có thể trông rất đặc biệt, nhưng thực ra chúng không phải. [a, 10] được sắp xếp sau[a]sauatrước[b, 5]trước[c] (ví dụ).

Nếu bạn sử dụng startkeyendkey, bạn nói "mọi thứ bao gồm và sau startkey và trước và bao gồm endkey". Các mục nhập startkeyendkey làm không phải có mặt trong danh sách.

+0

Nếu chúng tôi xóa [a, 10] và [a, 11] khỏi ví dụ của bạn ở trên. Couch sẽ bắt đầu tại [a, 12]? Đó là những gì dường như xảy ra trong tình huống của tôi. – Lumocra

+0

Vâng, chính xác điều đó sẽ xảy ra. CouchDB lấy khóa kế tiếp bằng hoặc lớn hơn khóa khởi động. – thriqon

+0

Mặc dù nó cũng lớn hơn khóa kết thúc. Ok, khó hiểu nhưng cảm ơn bạn đã làm rõ :-) – Lumocra