مصالح
تمام توابع تجمیعی میتوانند به عنوان عبارات سطح بالا در مرحله aggregate(...) استفاده شوند.
| نام | توضیحات |
COUNT | تعداد اسناد را برمیگرداند. |
COUNT_IF | تعداد اسنادی را که در آنها یک عبارت به TRUE ارزیابی میشود، برمیگرداند. |
COUNT_DISTINCT | تعداد مقادیر منحصر به فرد و غیر NULL را برمیگرداند. |
SUM | مجموع تمام مقادیر NUMERIC را برمیگرداند |
AVERAGE | میانگین تمام مقادیر NUMERIC را برمیگرداند |
MINIMUM | حداقل مقدار غیر NULL را برمیگرداند |
MAXIMUM | حداکثر مقدار غیر NULL را برمیگرداند |
FIRST | مقدار expression را برای اولین سند برمیگرداند. |
LAST | مقدار expression را برای آخرین سند برمیگرداند. |
ARRAY_AGG | آرایهای از تمام مقادیر ورودی را برمیگرداند. |
ARRAY_AGG_DISTINCT | آرایهای از تمام مقادیر ورودی متمایز را برمیگرداند. |
شمارش
نحو:
count() -> INT64
count(expression: ANY) -> INT64
شرح:
تعداد اسناد را از مرحله قبل که در expression به هر مقدار غیر NULL ارزیابی میشود، برمیگرداند. اگر هیچ expression ارائه نشده باشد، تعداد کل اسناد را از مرحله قبل برمیگرداند.
Web
// Total number of books in the collection const countOfAll = await execute(db.pipeline() .collection("books") .aggregate(countAll().as("count")) ); // Number of books with nonnull `ratings` field const countField = await execute(db.pipeline() .collection("books") .aggregate(field("ratings").count().as("count")) );
سویفت
// Total number of books in the collection let countAll = try await db.pipeline() .collection("books") .aggregate([CountAll().as("count")]) .execute() // Number of books with nonnull `ratings` field let countField = try await db.pipeline() .collection("books") .aggregate([Field("ratings").count().as("count")]) .execute()
Kotlin
// Total number of books in the collection val countAll = db.pipeline() .collection("books") .aggregate(AggregateFunction.countAll().alias("count")) .execute() // Number of books with nonnull `ratings` field val countField = db.pipeline() .collection("books") .aggregate(AggregateFunction.count("ratings").alias("count")) .execute()
Java
// Total number of books in the collection Task<Pipeline.Snapshot> countAll = db.pipeline() .collection("books") .aggregate(AggregateFunction.countAll().alias("count")) .execute(); // Number of books with nonnull `ratings` field Task<Pipeline.Snapshot> countField = db.pipeline() .collection("books") .aggregate(AggregateFunction.count("ratings").alias("count")) .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Count # Total number of books in the collection count_all = ( client.pipeline().collection("books").aggregate(Count().as_("count")).execute() ) # Number of books with nonnull `ratings` field count_field = ( client.pipeline() .collection("books") .aggregate(Count("ratings").as_("count")) .execute() )
COUNT_IF
نحو:
count_if(expression: BOOLEAN) -> INT64
شرح:
تعداد اسناد را از مرحله قبلی که در expression به TRUE ارزیابی میشود، برمیگرداند.
Web
const result = await execute(db.pipeline() .collection("books") .aggregate( field("rating").greaterThan(4).countIf().as("filteredCount") ) );
سویفت
let result = try await db.pipeline() .collection("books") .aggregate([ AggregateFunction("count_if", [Field("rating").greaterThan(4)]).as("filteredCount") ]) .execute()
Kotlin
val result = db.pipeline() .collection("books") .aggregate( AggregateFunction.countIf(field("rating").greaterThan(4)).alias("filteredCount") ) .execute()
Java
Task<Pipeline.Snapshot> result = db.pipeline() .collection("books") .aggregate( AggregateFunction.countIf(field("rating").greaterThan(4)).alias("filteredCount") ) .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .aggregate(Field.of("rating").greater_than(4).count_if().as_("filteredCount")) .execute() )
تعداد متمایز
نحو:
count_distinct(expression: ANY) -> INT64
شرح:
تعداد مقادیر منحصر به فرد غیر NULL و غیر ABSENT از expression را برمیگرداند.
Web
const result = await execute(db.pipeline() .collection("books") .aggregate(field("author").countDistinct().as("unique_authors")) );
سویفت
let result = try await db.pipeline() .collection("books") .aggregate([AggregateFunction("count_distinct", [Field("author")]).as("unique_authors")]) .execute()
Kotlin
val result = db.pipeline() .collection("books") .aggregate(AggregateFunction.countDistinct("author").alias("unique_authors")) .execute()
Java
Task<Pipeline.Snapshot> result = db.pipeline() .collection("books") .aggregate(AggregateFunction.countDistinct("author").alias("unique_authors")) .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .aggregate(Field.of("author").count_distinct().as_("unique_authors")) .execute() )
جمع
نحو:
sum(expression: ANY) -> NUMBER
شرح:
مجموع تمام مقادیر عددی را برمیگرداند و مقادیر غیر عددی را نادیده میگیرد. اگر هر مقداری NaN باشد، NaN را برمیگرداند.
خروجی، به جز در این موارد، از همان نوع عریضترین نوع ورودی خواهد بود:
- اگر نتوان یک
INTEGERرا به صورتINTEGERنمایش داد، آن نوع داده بهDOUBLEتبدیل میشود.
Web
const result = await execute(db.pipeline() .collection("cities") .aggregate(field("population").sum().as("totalPopulation")) );
سویفت
let result = try await db.pipeline() .collection("cities") .aggregate([Field("population").sum().as("totalPopulation")]) .execute()
Kotlin
val result = db.pipeline() .collection("cities") .aggregate(AggregateFunction.sum("population").alias("totalPopulation")) .execute()
Java
Task<Pipeline.Snapshot> result = db.pipeline() .collection("cities") .aggregate(AggregateFunction.sum("population").alias("totalPopulation")) .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("cities") .aggregate(Field.of("population").sum().as_("totalPopulation")) .execute() )
میانگین
نحو:
average(expression: ANY) -> FLOAT64
شرح:
میانگین تمام مقادیر عددی را برمیگرداند و مقادیر غیرعددی را نادیده میگیرد. اگر هر مقداری NaN باشد، مقدار NaN و اگر هیچ مقدار عددی تجمیع نشده باشد، مقدار NULL را برمیگرداند.
خروجی، به جز در این موارد، از همان نوع ورودی خواهد بود:
- اگر نتوان یک
INTEGERرا به صورتINTEGERنمایش داد، آن نوع داده بهDOUBLEتبدیل میشود.
Web
const result = await execute(db.pipeline() .collection("cities") .aggregate(field("population").average().as("averagePopulation")) );
سویفت
let result = try await db.pipeline() .collection("cities") .aggregate([Field("population").average().as("averagePopulation")]) .execute()
Kotlin
val result = db.pipeline() .collection("cities") .aggregate(AggregateFunction.average("population").alias("averagePopulation")) .execute()
Java
Task<Pipeline.Snapshot> result = db.pipeline() .collection("cities") .aggregate(AggregateFunction.average("population").alias("averagePopulation")) .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("cities") .aggregate(Field.of("population").average().as_("averagePopulation")) .execute() )
حداقل
نحو:
minimum(expression: ANY) -> ANY
شرح:
حداقل مقدار غیر NULL و غیر غایب expression را هنگام ارزیابی روی هر سند برمیگرداند.
اگر هیچ مقداری غیر از NULL یا غیر غایب وجود نداشته باشد، NULL برگردانده میشود. این شامل زمانی که هیچ سندی در نظر گرفته نشده باشد نیز میشود.
اگر چندین مقدار حداقل معادل وجود داشته باشد، هر یک از آن مقادیر را میتوان برگرداند. ترتیب نوع مقدار از ترتیب مستند پیروی میکند.
Web
const result = await execute(db.pipeline() .collection("books") .aggregate(field("price").minimum().as("minimumPrice")) );
سویفت
let result = try await db.pipeline() .collection("books") .aggregate([Field("price").minimum().as("minimumPrice")]) .execute()
Kotlin
val result = db.pipeline() .collection("books") .aggregate(AggregateFunction.minimum("price").alias("minimumPrice")) .execute()
Java
Task<Pipeline.Snapshot> result = db.pipeline() .collection("books") .aggregate(AggregateFunction.minimum("price").alias("minimumPrice")) .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .aggregate(Field.of("price").minimum().as_("minimumPrice")) .execute() )
حداکثر
نحو:
maximum(expression: ANY) -> ANY
شرح:
حداکثر مقدار غیر NULL و غیر غایب expression را هنگام ارزیابی روی هر سند برمیگرداند.
اگر هیچ مقداری غیر از NULL یا غیر غایب وجود نداشته باشد، NULL برگردانده میشود. این شامل زمانی که هیچ سندی در نظر گرفته نشده باشد نیز میشود.
اگر چندین مقدار حداکثر معادل وجود داشته باشد، هر یک از آن مقادیر را میتوان برگرداند. ترتیب نوع مقدار از ترتیب مستند پیروی میکند.
Web
const result = await execute(db.pipeline() .collection("books") .aggregate(field("price").maximum().as("maximumPrice")) );
سویفت
let result = try await db.pipeline() .collection("books") .aggregate([Field("price").maximum().as("maximumPrice")]) .execute()
Kotlin
val result = db.pipeline() .collection("books") .aggregate(AggregateFunction.maximum("price").alias("maximumPrice")) .execute()
Java
Task<Pipeline.Snapshot> result = db.pipeline() .collection("books") .aggregate(AggregateFunction.maximum("price").alias("maximumPrice")) .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .aggregate(Field.of("price").maximum().as_("maximumPrice")) .execute() )
اول
نحو:
first(expression: ANY) -> ANY
شرح:
مقدار expression را برای اولین سند برگردانده شده برمیگرداند.
آخرین
نحو:
last(expression: ANY) -> ANY
شرح:
مقدار expression مربوط به آخرین سند برگردانده شده را برمیگرداند.
آرایه_AGG
نحو:
array_agg(expression: ANY) -> ARRAY<ANY>
شرح:
آرایهای شامل تمام مقادیر expression را هنگام ارزیابی روی هر سند برمیگرداند.
اگر عبارت به یک مقدار غایب ختم شود، به NULL تبدیل میشود.
ترتیب عناصر در آرایه خروجی پایدار نیست و نباید به آن اعتماد کرد.
آرایه_AGG_متمایز
نحو:
array_agg_distinct(expression: ANY) -> ARRAY<ANY>
شرح:
آرایهای شامل تمام مقادیر متمایز expression را هنگام ارزیابی روی هر سند برمیگرداند.
اگر عبارت به یک مقدار غایب ختم شود، به NULL تبدیل میشود.
ترتیب عناصر در آرایه خروجی پایدار نیست و نباید به آن اعتماد کرد.