2013-08-23 32 views
5

Tôi đã đọc một số mã mẫu (đặc biệt là từ dự án demo Couchbase Model Views demo link) và nhận ra hàm map() rất lạ.Tại sao phát ra (meta.id, NULL)

function(doc, meta) { 
    if (doc.type == "beer" && doc.name){ 
     emit(doc.name, null); 
    } 
} 

Tại sao giá trị của hàm phát ra là rỗng, nhưng kết quả từ GetView ("bia", "bia") đang nhận giá trị hoàn hảo ???

Hãy giúp tôi!

+0

thực sự vì bản chất javascript, bạn có thể gọi chỉ là phát ra (doc.name) – avsej

Trả lời

7

Trong bộ kết quả của chế độ xem theo cách thủ công, chế độ xem được tạo ở chế độ nền. Nếu bạn có ví dụ 1 triệu tài liệu mỗi kích thước 4Kb mà không có bất kỳ lượt xem nào, hãy lấy ~ 4Gb trên đĩa. Khi bạn tạo chế độ xem có chức năng bản đồ như

function(doc, meta) { 
    emit(doc.name, doc); 
} 

Kết quả xem được lưu trữ riêng biệt. Và trong hầu hết các trường hợp (nếu bạn xem truy vấn với thông số Stale=Ok) couchbase trả về kết quả từ tập hợp các bản ghi "biên dịch sẵn", couchbase không quét tất cả tài liệu trên mỗi truy vấn.

Vì vậy, emmiting null trong các chức năng bản đồ được sử dụng để ngăn chặn việc sử dụng không gian đĩa và nó cũng làm tăng tốc độ lập chỉ mục.

Bây giờ câu hỏi thứ hai về phép thuật cơ sở khi "kết quả từ GetView (" bia "," bia ") đang nhận được giá trị hoàn hảo". Các hoạt động Couchbase get(key)getMulti(keys) rất nhanh. Vì vậy, khi bạn xem truy vấn phát ra null, nó sẽ trả về không chỉ nulls, mà còn trả về các id tài liệu. Sau đó, bạn có thể sử dụng thủ công getMulti cho mảng tài liệu đó để nhận giá trị của tài liệu hoặc trong một số SDK có tham số truy vấn được gọi là IncludeDocs sẽ tự động thực hiện tương tự.

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