2016-09-15 17 views
5
db.query(aql ` 
    FOR doc IN ${collection} 
    FILTER REGEX_TEST(CONCAT(VALUES(doc, true)), ${queryStr}, true) 
     SORT doc[${sortBy}] ${dir} 
     LIMIT ${start, count} 
      RETURN doc._key 
     `) 
     .then(cursor => { 
      cb(cursor._result) 
     }, err => console.log(err)) 

tôi đã ở trên AQL truy vấn, tôi muốn đếm tổng nuber kết quả lọc trước khi hạn chế kết quả mỗi trang (Ví Pagination Mục đích)ArangoDb - Làm thế nào để đếm số lượng kết quả lọc trước khi hạn chế chúng

tôi nghĩ rằng vấn đề tương tự như MySQL - How to count rows before pagination? này, Find total number of results in mySQL query with offset+limit

muốn làm trong ArangoDb với AQL

và một phần của giải pháp có thể đây How to count number of elements with AQL?

Vì vậy, giải pháp hiệu quả nhất/tốt nhất cho yêu cầu của tôi với AQL là gì?

+0

Câu trả lời có đáp ứng đầy đủ nhu cầu của bạn không? Nếu không, những gì còn thiếu? Nếu, bạn có thể đánh dấu nó được chấp nhận không? – dothebart

+0

Một trợ giúp khác xin vui lòng .. :) xin vui lòng cho tôi một ví dụ tối thiểu để làm thế nào để đạt được các bằng cách sử dụng ArangoJS – shivaraj

Trả lời

8

Bạn có thể đặt cờ fullCount trong các tùy chọn để tạo con trỏ thành true. Sau đó, kết quả sẽ có thuộc tính bổ sung với các thuộc tính phụ statsfullCount.

Sau đó, bạn có thể nhận được số fullCount -attribute qua số cursor.extra.stats.fullCount. Thuộc tính này chứa số lượng tài liệu trong kết quả trước khi áp dụng truy vấn LIMIT cuối cùng trong truy vấn. see HTTP documentation

Ngoài ra, bạn nên sử dụng explain feature để phân tích truy vấn của mình. Trong trường hợp của bạn, truy vấn của bạn sẽ luôn quét toàn bộ bộ sưu tập, do đó sẽ không mở rộng tốt.

cập nhật

tôi thêm cờ fullCount mã của bạn. Lưu ý rằng thuộc tính fullCount chỉ xuất hiện nếu số lượng kết quả trước khi LIMIT cao hơn sau đó kết quả sau đó.

db.query(aql ` 
    FOR doc IN ${collection} 
    FILTER REGEX_TEST(CONCAT(VALUES(doc, true)), ${queryStr}, true) 
     SORT doc[${sortBy}] ${dir} 
     LIMIT ${start, count} 
      RETURN {family: doc.family, group: doc.group} `, {count:true, options:{fullCount:true} }) 
.then(cursor => { console.log(cursor) }, err => console.log(err)) 
+0

Một trợ giúp thêm xin vui lòng .. :) xin vui lòng cho tôi một ví dụ tối thiểu cho làm thế nào để đạt được trên bằng cách sử dụng ArangoJS – shivaraj

+0

Làm cách nào tôi có thể đặt cờ trong này .. db.query (aql ' CHO doc TRONG $ {collection} FILTER REGEX_TEST (CONCAT (GIÁ TRỊ, đúng), $ {queryStr}, true) SORT doc [$ {sortBy}] $ {dir} LIMIT $ {bắt đầu, đếm} TRẢ LẠI {gia đình: doc.family, nhóm: doc.group} ', {count: true}). (bảng điều khiển = cursor {>. log (con trỏ) }, err => console.log (err)) – shivaraj

+0

Làm thế nào để đặt cờ đếm cho ở trên? – shivaraj

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