الدوالّ المجمّعة

تجميع

يمكن استخدام جميع دوال التجميع كتعبيرات ذات مستوى أعلى في مرحلة 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

البنية:

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"))
);
Swift
// 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();
Python
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")
  )
);
Swift
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();
Python
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

البنية:

count_distinct(expression: ANY) -> INT64

الوصف:

تعرض هذه الدالة عدد القيم الفريدة غير NULL وغير ABSENT في expression.

Web

const result = await execute(db.pipeline()
  .collection("books")
  .aggregate(field("author").countDistinct().as("unique_authors"))
);
Swift
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();
Python
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

البنية:

sum(expression: ANY) -> NUMBER

الوصف:

لعرض مجموع جميع القيم الرقمية، مع تجاهل القيم غير الرقمية تعرض الدالة NaN إذا كانت أي من القيم NaN.

سيكون الناتج من النوع نفسه كأوسع نوع إدخال باستثناء الحالات التالية:

  • سيتم تحويل INTEGER إلى DOUBLE إذا تعذّر تمثيله كـ INTEGER.

Web

const result = await execute(db.pipeline()
  .collection("cities")
  .aggregate(field("population").sum().as("totalPopulation"))
);
Swift
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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("cities")
    .aggregate(Field.of("population").sum().as_("totalPopulation"))
    .execute()
)

AVERAGE

البنية:

average(expression: ANY) -> FLOAT64

الوصف:

تعرض هذه الدالة متوسط جميع القيم الرقمية، مع تجاهل القيم غير الرقمية. يتم تقييمها على أنّها NaN إذا كانت أي من القيم NaN، أو NULL إذا لم يتم تجميع أي قيم عددية.

سيكون الناتج من النوع نفسه مثل نوع الإدخال باستثناء الحالات التالية:

  • سيتم تحويل INTEGER إلى DOUBLE إذا تعذّر تمثيله كـ INTEGER.

Web

const result = await execute(db.pipeline()
  .collection("cities")
  .aggregate(field("population").average().as("averagePopulation"))
);
Swift
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();
Python
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"))
);
Swift
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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .aggregate(Field.of("price").minimum().as_("minimumPrice"))
    .execute()
)

MAXIMUM

البنية:

maximum(expression: ANY) -> ANY

الوصف:

تعرض هذه الدالة الحد الأقصى للقيمة غير NULL وغير الغائبة في expression عند تقييمها في كل مستند.

إذا لم تكن هناك قيم غير NULL وغير غائبة، يتم عرض NULL. ويشمل ذلك الحالات التي لا يتم فيها أخذ أي مستندات في الاعتبار.

إذا كانت هناك عدة قيم قصوى مكافئة، يمكن عرض أي من هذه القيم. يتبع ترتيب أنواع القيم الترتيب الموثّق.

Web

const result = await execute(db.pipeline()
  .collection("books")
  .aggregate(field("price").maximum().as("maximumPrice"))
);
Swift
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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .aggregate(Field.of("price").maximum().as_("maximumPrice"))
    .execute()
)

FIRST

البنية:

first(expression: ANY) -> ANY

الوصف:

تعرض هذه السمة قيمة expression للمستند الأول الذي تم عرضه.

LAST

البنية:

last(expression: ANY) -> ANY

الوصف:

تعرض هذه السمة قيمة expression للمستند الأخير الذي تم عرضه.

ARRAY_AGG

البنية:

array_agg(expression: ANY) -> ARRAY<ANY>

الوصف:

تعرض هذه الدالة صفيفًا يحتوي على جميع قيم expression عند تقييمها في كل مستند.

إذا تم حلّ التعبير إلى قيمة غير متوفّرة، يتم تحويله إلى NULL.

إنّ ترتيب العناصر في مصفوفة الإخراج غير ثابت ولا يمكن الاعتماد عليه.

ARRAY_AGG_DISTINCT

البنية:

array_agg_distinct(expression: ANY) -> ARRAY<ANY>

الوصف:

تعرض هذه الدالة صفيفًا يحتوي على جميع القيم المميزة لـ expression عند تقييمها في كل مستند.

إذا تم حلّ التعبير إلى قيمة غير متوفّرة، يتم تحويله إلى NULL.

إنّ ترتيب العناصر في مصفوفة الإخراج غير ثابت ولا يمكن الاعتماد عليه.