توابع جمع

مصالح

تمام توابع تجمیعی می‌توانند به عنوان عبارات سطح بالا در مرحله 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 تبدیل می‌شود.

ترتیب عناصر در آرایه خروجی پایدار نیست و نباید به آن اعتماد کرد.