Method: projects.databases.documents.runAggregationQuery

Chạy một truy vấn tổng hợp.

Thay vì tạo kết quả Document như Firestore.RunQuery, API này cho phép chạy phương thức tổng hợp để tạo ra một loạt AggregationResult phía máy chủ.

Ví dụ cấp cao:

-- Return the number of documents in table given a filter.
SELECT COUNT(*) FROM ( SELECT * FROM k where a = true );

Yêu cầu HTTP

POST https://firestore.googleapis.com/v1beta1/{parent=projects/*/databases/*/documents}:runAggregationQuery

URL sử dụng cú pháp Chuyển mã gRPC.

Tham số đường dẫn

Tham số
parent

string

Bắt buộc. Tên tài nguyên gốc. Theo định dạng: projects/{projectId}/databases/{databaseId}/documents hoặc projects/{projectId}/databases/{databaseId}/documents/{document_path}. Ví dụ: projects/my-project/databases/my-database/documents hoặc projects/my-project/databases/my-database/documents/chatrooms/my-chatroom

Nội dung yêu cầu

Nội dung yêu cầu chứa dữ liệu có cấu trúc sau:

Biểu diễn dưới dạng JSON
{
  "explainOptions": {
    object (ExplainOptions)
  },

  // Union field query_type can be only one of the following:
  "structuredAggregationQuery": {
    object (StructuredAggregationQuery)
  }
  // End of list of possible types for union field query_type.

  // Union field consistency_selector can be only one of the following:
  "transaction": string,
  "newTransaction": {
    object (TransactionOptions)
  },
  "readTime": string
  // End of list of possible types for union field consistency_selector.
}
Trường
explainOptions

object (ExplainOptions)

Không bắt buộc. Giải thích các tuỳ chọn cho truy vấn. Nếu được đặt, thống kê truy vấn bổ sung sẽ được trả về. Nếu không, chỉ có kết quả truy vấn được trả về.

Trường hợp query_type. Truy vấn cần chạy. query_type chỉ có thể là một trong những trạng thái sau:
structuredAggregationQuery

object (StructuredAggregationQuery)

Truy vấn tổng hợp.

Trường hợp consistency_selector. Chế độ nhất quán cho truy vấn sẽ mặc định là nhất quán cao. consistency_selector chỉ có thể là một trong những trạng thái sau:
transaction

string (bytes format)

Chạy quá trình tổng hợp trong một giao dịch đã hoạt động.

Giá trị ở đây là mã giao dịch không rõ ràng để thực thi truy vấn.

Một chuỗi được mã hoá base64.

newTransaction

object (TransactionOptions)

Bắt đầu một giao dịch mới trong truy vấn, được đặt mặc định là chỉ có thể đọc.

Mã giao dịch mới sẽ được trả về dưới dạng phản hồi đầu tiên trong luồng.

readTime

string (Timestamp format)

Thực thi truy vấn tại dấu thời gian nhất định.

Đây phải là dấu thời gian có độ chính xác tính bằng micrô giây trong vòng 1 giờ qua, hoặc nếu tính năng Khôi phục đúng thời điểm được bật, thì bạn có thể thêm dấu thời gian là toàn bộ phút trong 7 ngày qua.

Dấu thời gian ở định dạng "Zulu" RFC3339 UTC, với độ phân giải nano giây và tối đa 9 chữ số phân số. Ví dụ: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z".

Nội dung phản hồi

Câu trả lời cho Firestore.RunAggregationQuery.

Nếu thành công, phần nội dung phản hồi sẽ chứa dữ liệu có cấu trúc sau:

Biểu diễn dưới dạng JSON
{
  "result": {
    object (AggregationResult)
  },
  "transaction": string,
  "readTime": string,
  "explainMetrics": {
    object (ExplainMetrics)
  }
}
Trường
result

object (AggregationResult)

Một kết quả tổng hợp duy nhất.

Không hiển thị khi báo cáo tiến trình một phần.

transaction

string (bytes format)

Giao dịch được bắt đầu theo yêu cầu này.

Chỉ xuất hiện trong phản hồi đầu tiên khi người dùng yêu cầu bắt đầu một giao dịch mới.

Một chuỗi được mã hoá base64.

readTime

string (Timestamp format)

Thời gian tính toán kết quả tổng hợp. Giá trị này luôn tăng đơn điệu; trong trường hợp này, AggregatResult trước trong luồng kết quả được đảm bảo là không thay đổi giữa readTime và này.

Nếu truy vấn không trả về kết quả nào, thì phản hồi có readTime và không có result nào sẽ được gửi và số liệu này thể hiện thời điểm chạy truy vấn.

Dấu thời gian ở định dạng "Zulu" RFC3339 UTC, với độ phân giải nano giây và tối đa 9 chữ số phân số. Ví dụ: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z".

explainMetrics

object (ExplainMetrics)

Truy vấn giải thích các chỉ số. Mã này chỉ xuất hiện khi RunAggregationQueryRequest.explain_options được cung cấp và chỉ được gửi một lần cùng với phản hồi cuối cùng trong luồng.

Phạm vi uỷ quyền

Yêu cầu một trong các phạm vi OAuth sau đây:

  • https://www.googleapis.com/auth/datastore
  • https://www.googleapis.com/auth/cloud-platform

Để biết thêm thông tin, hãy xem bài viết Tổng quan về hoạt động xác thực.

StructuredAggregationQuery

Truy vấn Firestore để chạy tổng hợp trên StructuredQuery.

Biểu diễn dưới dạng JSON
{
  "aggregations": [
    {
      object (Aggregation)
    }
  ],

  // Union field query_type can be only one of the following:
  "structuredQuery": {
    object (StructuredQuery)
  }
  // End of list of possible types for union field query_type.
}
Trường
aggregations[]

object (Aggregation)

Không bắt buộc. Một loạt các phép tổng hợp để áp dụng cho các kết quả của structuredQuery.

Yêu cầu:

  • Tối thiểu một và tối đa là năm tổng hợp cho mỗi truy vấn.
Trường hợp query_type. Truy vấn cơ sở để tổng hợp. query_type chỉ có thể là một trong những trạng thái sau:
structuredQuery

object (StructuredQuery)

Truy vấn có cấu trúc lồng nhau.

Tổng hợp

Xác định quá trình tổng hợp tạo ra một kết quả duy nhất.

Biểu diễn dưới dạng JSON
{
  "alias": string,

  // Union field operator can be only one of the following:
  "count": {
    object (Count)
  },
  "sum": {
    object (Sum)
  },
  "avg": {
    object (Avg)
  }
  // End of list of possible types for union field operator.
}
Trường
alias

string

Không bắt buộc. Tên không bắt buộc của trường để lưu trữ kết quả tổng hợp.

Nếu không được cung cấp, Firestore sẽ chọn một tên mặc định theo định dạng field_<incremental_id++>. Ví dụ:

AGGREGATE
  COUNT_UP_TO(1) AS count_up_to_1,
  COUNT_UP_TO(2),
  COUNT_UP_TO(3) AS count_up_to_3,
  COUNT(*)
OVER (
  ...
);

sẽ trở thành:

AGGREGATE
  COUNT_UP_TO(1) AS count_up_to_1,
  COUNT_UP_TO(2) AS field_1,
  COUNT_UP_TO(3) AS count_up_to_3,
  COUNT(*) AS field_2
OVER (
  ...
);

Yêu cầu:

  • Phải là duy nhất trên tất cả các bí danh tổng hợp.
  • Tuân thủ các giới hạn của document field name.
Trường hợp operator. Loại tổng hợp cần thực hiện, bắt buộc. operator chỉ có thể là một trong những trạng thái sau:
count

object (Count)

Tổng hợp dữ liệu.

sum

object (Sum)

Trang web tổng hợp.

avg

object (Avg)

Trang web tổng hợp trung bình.

Số lượt

Số lượng tài liệu phù hợp với truy vấn.

Hàm tổng hợp COUNT(*) hoạt động trên toàn bộ tài liệu nên không yêu cầu tham chiếu trường.

Biểu diễn dưới dạng JSON
{
  "upTo": string
}
Trường
upTo

string (Int64Value format)

Không bắt buộc. Giới hạn tùy chọn về số lượng tài liệu tối đa cần đếm.

Đây là một cách để đặt giới hạn trên cho số lượng tài liệu cần quét, giúp hạn chế độ trễ và chi phí.

Chưa xác định được hiểu là không có ràng buộc.

Ví dụ cấp cao:

AGGREGATE COUNT_UP_TO(1000) OVER ( SELECT * FROM k );

Yêu cầu:

  • Phải lớn hơn 0 khi hiển thị.

Tổng

Tổng các giá trị của trường được yêu cầu.

  • Hệ thống chỉ tổng hợp giá trị số. Tất cả các giá trị không phải số, bao gồm cả NULL, đều bị bỏ qua.

  • Nếu các giá trị tổng hợp chứa NaN, hàm trả về NaN. Toán học Infinity tuân theo tiêu chuẩn IEEE-754.

  • Nếu tập hợp giá trị tổng hợp trống, hàm sẽ trả về 0.

  • Trả về số nguyên 64 bit nếu tất cả các số tổng hợp là số nguyên và kết quả tổng không tràn. Nếu không, kết quả sẽ được trả về dưới dạng kép. Lưu ý rằng ngay cả khi tất cả các giá trị tổng hợp là số nguyên, kết quả vẫn được trả về dưới dạng số nguyên kép nếu không thể nằm vừa trong số nguyên 64 bit đã ký. Khi điều này xảy ra, giá trị trả về sẽ mất độ chính xác.

  • Khi xảy ra tình trạng thiếu hụt, tổng hợp dấu phẩy động là không xác định. Điều này có nghĩa là việc chạy cùng một truy vấn nhiều lần mà không có bất kỳ thay đổi nào đối với các giá trị cơ bản có thể tạo ra kết quả hơi khác nhau mỗi lần. Trong những trường hợp đó, các giá trị phải được lưu trữ dưới dạng số nguyên thay vì số thực.

Biểu diễn dưới dạng JSON
{
  "field": {
    object (FieldReference)
  }
}
Trường
field

object (FieldReference)

Trường cần tổng hợp.

Trung bình

Trung bình của các giá trị trong trường được yêu cầu.

  • Hệ thống chỉ tổng hợp giá trị số. Tất cả các giá trị không phải số, bao gồm cả NULL, đều bị bỏ qua.

  • Nếu các giá trị tổng hợp chứa NaN, hàm trả về NaN. Toán học Infinity tuân theo tiêu chuẩn IEEE-754.

  • Nếu tập hợp giá trị tổng hợp trống, hàm sẽ trả về NULL.

  • Luôn trả về kết quả dưới dạng một đối tượng kép.

Biểu diễn dưới dạng JSON
{
  "field": {
    object (FieldReference)
  }
}
Trường
field

object (FieldReference)

Trường cần tổng hợp.

AggregationResult

Kết quả của một nhóm duy nhất trong một truy vấn tổng hợp trên Firestore.

Khoá của aggregateFields là giống nhau đối với tất cả kết quả trong một truy vấn tổng hợp, không giống như các truy vấn tài liệu có thể có các trường khác nhau cho mỗi kết quả.

Biểu diễn dưới dạng JSON
{
  "aggregateFields": {
    string: {
      object (Value)
    },
    ...
  }
}
Trường
aggregateFields

map (key: string, value: object (Value))

Kết quả của các hàm tổng hợp, ví dụ: COUNT(*) AS total_docs.

Khoá là alias được gán cho hàm tổng hợp trên dữ liệu đầu vào và kích thước của tập hợp map này bằng số lượng hàm tổng hợp trong truy vấn.

Đối tượng chứa danh sách các cặp "key": value. Ví dụ: { "name": "wrench", "mass": "1.3kg", "count": "3" }.