همه توابع

تجمیع

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

Node.js
// Total number of books in the collection
const countOfAll = await db.pipeline()
  .collection("books")
  .aggregate(countAll().as("count"))
  .execute();

// Number of books with nonnull `ratings` field
const countField = await db.pipeline()
  .collection("books")
  .aggregate(field("ratings").count().as("count"))
  .execute();

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();
پایتون
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()
)
جاوا
// Total number of books in the collection
Pipeline.Snapshot countAll =
    firestore.pipeline().collection("books").aggregate(countAll().as("count")).execute().get();

// Number of books with nonnull `ratings` field
Pipeline.Snapshot countField =
    firestore
        .pipeline()
        .collection("books")
        .aggregate(count("ratings").as("count"))
        .execute()
        .get();
رفتن
// Total number of books in the collection
countAll, err := client.Pipeline().Collection("books").
	Aggregate(firestore.Accumulators(firestore.CountAll().As("count"))).
	Execute(ctx).Results().GetAll()
if err != nil {
	fmt.Fprintf(w, "GetAll failed: %v", err)
	return err
}

// Number of books with nonnull `ratings` field
countField, err := client.Pipeline().
	Collection("books").
	Aggregate(firestore.Accumulators(firestore.Count("ratings").As("count"))).
	Execute(ctx).Results().GetAll()
if err != nil {
	fmt.Fprintf(w, "GetAll failed: %v", err)
	return err
}

COUNT_IF

نحو:

count_if(expression: BOOLEAN) -> INT64

شرح:

تعداد اسناد مرحله قبلی را که expression در آن به TRUE ارزیابی می‌شود برمی‌گرداند.

Node.js
const result = await db.pipeline()
  .collection("books")
  .aggregate(
    field("rating").greaterThan(4).countIf().as("filteredCount")
  )
  .execute();

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();
پایتون
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()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .aggregate(countIf(field("rating").greaterThan(4)).as("filteredCount"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Aggregate(firestore.Accumulators(
		firestore.CountIf(firestore.FieldOf("rating").GreaterThan(4)).As("filteredCount"),
	)).
	Execute(ctx)

COUNT_DISTINCT

نحو:

count_distinct(expression: ANY) -> INT64

شرح:

تعداد مقادیر یکتای غیرNULL و غیرABSENT expression را برمی‌گرداند.

Node.js
const result = await db.pipeline()
  .collection("books")
  .aggregate(field("author").countDistinct().as("unique_authors"))
  .execute();

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();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .aggregate(Field.of("author").count_distinct().as_("unique_authors"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .aggregate(countDistinct("author").as("unique_authors"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Aggregate(firestore.Accumulators(
		firestore.CountDistinct("author").As("unique_authors"),
	)).
	Execute(ctx)

SUM

نحو:

sum(expression: ANY) -> NUMBER

شرح:

مجموع همه مقادیر عددی را برمی‌گرداند و مقادیر غیرعددی را نادیده می‌گیرد. اگر هریک از مقادیر NaN باشد، NaN را برمی‌گرداند.

برونداد همان نوعی را خواهد داشت که گسترده‌ترین نوع ورودی دارد، به‌جز در این موارد:

  • اگر INTEGER نتواند به‌عنوان INTEGER نمایش داده شود، به DOUBLE تبدیل خواهد شد.
Node.js
const result = await db.pipeline()
  .collection("cities")
  .aggregate(field("population").sum().as("totalPopulation"))
  .execute();

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();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("cities")
    .aggregate(Field.of("population").sum().as_("totalPopulation"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("cities")
        .aggregate(sum("population").as("totalPopulation"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("cities").
	Aggregate(firestore.Accumulators(
		firestore.Sum("population").As("totalPopulation"),
	)).
	Execute(ctx)

میانگین

نحو:

average(expression: ANY) -> FLOAT64

شرح:

میانگین همه مقادیر عددی را برمی‌گرداند و مقادیر غیرعددی را نادیده می‌گیرد. اگر هرکدام از مقادیر NaN باشد، به NaN ارزیابی می‌شود، یا اگر هیچ مقدار عددی‌ای تجمیع نشده باشد، به NULL ارزیابی می‌شود.

برونداد همان نوع ورودی را خواهد داشت، به‌جز در موارد زیر:

  • اگر INTEGER نتواند به‌عنوان INTEGER نمایش داده شود، به DOUBLE تبدیل خواهد شد.
Node.js
const result = await db.pipeline()
  .collection("cities")
  .aggregate(field("population").average().as("averagePopulation"))
  .execute();

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();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("cities")
    .aggregate(Field.of("population").average().as_("averagePopulation"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("cities")
        .aggregate(average("population").as("averagePopulation"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("cities").
	Aggregate(firestore.Accumulators(
		firestore.Average("population").As("averagePopulation"),
	)).
	Execute(ctx)

حداقل

نحو:

minimum(expression: ANY) -> ANY

شرح:

کمترین مقدار غیرNULL و غیرغایب expression را هنگام ارزیابی در هر سند برمی‌گرداند.

اگر هیچ مقدار غیرNULL و غیرغایبی وجود نداشته باشد، NULL برگردانده می‌شود. این شامل زمانی می‌شود که هیچ سندی درنظر گرفته نمی‌شود.

اگر چند مقدار معادل حداقل وجود داشته باشد، هرکدام از آن مقادیر می‌تواند برگردانده شود. ترتیب نوع مقدار از ترتیب مستندشده پیروی می‌کند.

Node.js
const result = await db.pipeline()
  .collection("books")
  .aggregate(field("price").minimum().as("minimumPrice"))
  .execute();

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();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .aggregate(Field.of("price").minimum().as_("minimumPrice"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .aggregate(minimum("price").as("minimumPrice"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Aggregate(firestore.Accumulators(
		firestore.Minimum("price").As("minimumPrice"),
	)).
	Execute(ctx)

حداکثر

نحو:

maximum(expression: ANY) -> ANY

شرح:

بیشترین مقدار غیرNULL و غیرغایب expression را هنگام ارزیابی در هر سند برمی‌گرداند.

اگر هیچ مقدار غیرNULL و غیرغایبی وجود نداشته باشد، NULL برگردانده می‌شود. این شامل زمانی می‌شود که هیچ سندی درنظر گرفته نمی‌شود.

اگر چند مقدار حداکثر معادل وجود داشته باشد، هرکدام از آن مقادیر می‌تواند برگردانده شود. ترتیب نوع مقدار از ترتیب مستندشده پیروی می‌کند.

Node.js
const result = await db.pipeline()
  .collection("books")
  .aggregate(field("price").maximum().as("maximumPrice"))
  .execute();

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();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .aggregate(Field.of("price").maximum().as_("maximumPrice"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .aggregate(maximum("price").as("maximumPrice"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Aggregate(firestore.Accumulators(
		firestore.Maximum("price").As("maximumPrice"),
	)).
	Execute(ctx)

اولین

نحو:

first(expression: ANY) -> ANY

شرح:

مقدار expression را برای اولین سند برگردانده‌شده برمی‌گرداند.

آخرین

نحو:

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 تبدیل می‌شود.

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

توابع حسابی

همه توابع حسابی در Cloud Firestore رفتارهای زیر را دارند:

  • اگر هرکدام از پارامترهای ورودی NULL باشد، به NULL ارزیابی می‌شود.
  • اگر هرکدام از متغیرهای مستقل NaN باشد، به NaN ارزیابی می‌شود.
  • اگر سرریز یا زیرریز رخ دهد، خطایی ایجاد می‌کند.

‫Cloud Firestore گسترش نوع عددی را براساس سلسله‌مراتب زیر انجام می‌دهد: INT32 < INT64 < FLOAT64 < DECIMAL128. وقتی یک تابع حسابی چندین آرگومان عددی از انواع مختلف (مثلاً add(5.0D, 6L)) می‌گیرد، انواع محدودتر به‌طور ضمنی به گسترده‌ترین نوع موجود در میان عملوندها تبدیل می‌شوند. در مثال قبلی، 6L به 6.0D گسترش یافته است که باعث می‌شود عبارت نوع FLOAT64 را برگرداند.

اجبار ضمنی از INT64 -> FLOAT64 می‌تواند منجر به ازدست رفتن دقت شود زیرا مقدار اجباری می‌تواند کم‌ارزش‌ترین بیت‌های خود را ازدست بدهد. مقدار حاصل نسخه گردشده مقدار عدد صحیح اصلی بااستفاده از حالت گرد کردن به نزدیک‌ترین عدد IEEE 754 خواهد بود.

نام شرح
ABS قدر مطلق number را برمی‌گرداند
ADD مقدار x + y را برمی‌گرداند
SUBTRACT مقدار x - y را برمی‌گرداند
MULTIPLY مقدار x * y را برمی‌گرداند
DIVIDE مقدار x / y را برمی‌گرداند
MOD باقی‌مانده تقسیم x / y را برمی‌گرداند
CEIL سقف number را برمی‌گرداند
FLOOR کف number را برمی‌گرداند
ROUND number را به places رقم اعشاری گرد می‌کند
TRUNC number را تا places رقم اعشار کوتاه می‌کند
POW مقدار base^exponent را برمی‌گرداند
SQRT ریشه دوم number را برمی‌گرداند
EXP عدد اویلر را به توان exponent می‌رساند و برمی‌گرداند
LN لگاریتم طبیعی number را برمی‌گرداند
LOG لگاریتم number را برمی‌گرداند
LOG10 لگاریتم number را در مبنای 10 برمی‌گرداند
RAND عدد ممیز شناور شبه‌تصادفی را برمی‌گرداند

جستجوهای نمانام‌محور اسنادی (ABS)

نحو:

abs[N <: INT32 | INT64 | FLOAT64](number: N) -> N

شرح:

قدر مطلق number را برمی‌گرداند.

  • وقتی تابع مقدار INT32 یا INT64 را سرریز کند، خطایی ایجاد می‌کند.

نمونه:

شماره abs(number)
10 10
-10 10
‫۱۰ لیتر ‫۱۰ لیتر
‫-۰٫۰ ۰٫۰
‫۵-۱۰ ‫۵-۱۰
‫۱۰٫۵- ‫۵-۱۰
-231 [error]
-۲۶۳ [error]

افزودن

نحو:

add[N <: INT32 | INT64 | FLOAT64](x: N, y: N) -> N

شرح:

مقدار x + y را برمی‌گرداند.

نمونه:

x y add(x, y)
20 3 23
۱۰٫۰ 1 ۱۱٫۰
22.5 ‫۲٫۰ ۲۴٫۵
INT64.MAX 1 [error]
INT64.MIN ۱- [error]
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("soldBooks").add(field("unsoldBooks")).as("totalBooks"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("soldBooks").add(field("unsoldBooks")).as("totalBooks"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("soldBooks").add(Field("unsoldBooks")).as("totalBooks")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(Expression.add(field("soldBooks"), field("unsoldBooks")).alias("totalBooks"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(Expression.add(field("soldBooks"), field("unsoldBooks")).alias("totalBooks"))
    .execute();
    
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("soldBooks").add(Field.of("unsoldBooks")).as_("totalBooks"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(add(field("soldBooks"), field("unsoldBooks")).as("totalBooks"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.Add(firestore.FieldOf("soldBooks"), firestore.FieldOf("unsoldBooks")).As("totalBooks"),
	)).
	Execute(ctx)

تفریق

نحو:

subtract[N <: INT32 | INT64 | FLOAT64](x: N, y: N) -> N

شرح:

مقدار x - y را برمی‌گرداند.

نمونه:

x y subtract(x, y)
20 3 17
۱۰٫۰ 1 ۹٫۰
22.5 ‫۲٫۰ ۲۰٫۵
INT64.MAX ۱- [error]
INT64.MIN 1 [error]
Node.js
const storeCredit = 7;
const result = await db.pipeline()
  .collection("books")
  .select(field("price").subtract(constant(storeCredit)).as("totalCost"))
  .execute();

Web

const storeCredit = 7;
const result = await execute(db.pipeline()
  .collection("books")
  .select(field("price").subtract(constant(storeCredit)).as("totalCost"))
);
Swift
let storeCredit = 7
let result = try await db.pipeline()
  .collection("books")
  .select([Field("price").subtract(Constant(storeCredit)).as("totalCost")])
  .execute()

Kotlin

val storeCredit = 7
val result = db.pipeline()
    .collection("books")
    .select(Expression.subtract(field("price"), storeCredit).alias("totalCost"))
    .execute()

Java

int storeCredit = 7;
Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(Expression.subtract(field("price"), storeCredit).alias("totalCost"))
    .execute();
    
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

store_credit = 7
result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("price").subtract(store_credit).as_("totalCost"))
    .execute()
)
جاوا
int storeCredit = 7;
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(subtract(field("price"), storeCredit).as("totalCost"))
        .execute()
        .get();
رفتن
storeCredit := 7
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.Subtract(firestore.FieldOf("price"), storeCredit).As("totalCost"),
	)).
	Execute(ctx)

MULTIPLY

نحو:

multiply[N <: INT32 | INT64 | FLOAT64](x: N, y: N) -> N

شرح:

مقدار x * y را برمی‌گرداند.

نمونه:

x y multiply(x, y)
20 3 60
۱۰٫۰ 1 ۱۰٫۰
22.5 ‫۲٫۰ ۴۵٫۰
INT64.MAX 2 [error]
INT64.MIN 2 [error]
FLOAT64.MAX FLOAT64.MAX +inf
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("price").multiply(field("soldBooks")).as("revenue"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("price").multiply(field("soldBooks")).as("revenue"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("price").multiply(Field("soldBooks")).as("revenue")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(Expression.multiply(field("price"), field("soldBooks")).alias("revenue"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(Expression.multiply(field("price"), field("soldBooks")).alias("revenue"))
    .execute();
    
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("price").multiply(Field.of("soldBooks")).as_("revenue"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(multiply(field("price"), field("soldBooks")).as("revenue"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.Multiply(firestore.FieldOf("price"), firestore.FieldOf("soldBooks")).As("revenue"),
	)).
	Execute(ctx)

تقسیم

نحو:

divide[N <: INT32 | INT64 | FLOAT64](x: N, y: N) -> N

شرح:

مقدار x / y را برمی‌گرداند. تقسیم عدد صحیح کوتاه شده است.

نمونه:

x y divide(x, y)
20 3 6
۱۰٫۰ 3 ‫۳٫۳۳۳...
22.5 2 ‫۱۱.۲۵
10 0 [error]
‫۱٫۰ ۰٫۰ +inf
‫۱٫۰- ۰٫۰ -inf
۰٫۰ ۰٫۰ NaN
+inf +inf NaN
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("ratings").divide(field("soldBooks")).as("reviewRate"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("ratings").divide(field("soldBooks")).as("reviewRate"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("ratings").divide(Field("soldBooks")).as("reviewRate")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(Expression.divide(field("ratings"), field("soldBooks")).alias("reviewRate"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(Expression.divide(field("ratings"), field("soldBooks")).alias("reviewRate"))
    .execute();
    
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("ratings").divide(Field.of("soldBooks")).as_("reviewRate"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(divide(field("ratings"), field("soldBooks")).as("reviewRate"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.Divide(firestore.FieldOf("ratings"), firestore.FieldOf("soldBooks")).As("reviewRate"),
	)).
	Execute(ctx)

بهبوددهنده

نحو:

mod[N <: INT32 | INT64 | FLOAT64](x: N, y: N) -> N

شرح:

باقیمانده x / y را برمی‌گرداند.

  • وقتی y برای انواع عدد صحیح (INT64) صفر باشد، error را برمی‌گرداند.
  • وقتی y برای انواع شناور (FLOAT64) صفر باشد، NaN را برمی‌گرداند.

نمونه:

x y mod(x, y)
20 3 2
-10 3 ۱-
10 ۳- 1
-10 ۳- ۱-
10 1 0
22.5 2 ۰٫۵
22.5 ۰٫۰ NaN
25 0 [error]
Node.js
const displayCapacity = 1000;
const result = await db.pipeline()
  .collection("books")
  .select(field("unsoldBooks").mod(constant(displayCapacity)).as("warehousedBooks"))
  .execute();

Web

const displayCapacity = 1000;
const result = await execute(db.pipeline()
  .collection("books")
  .select(field("unsoldBooks").mod(constant(displayCapacity)).as("warehousedBooks"))
);
Swift
let displayCapacity = 1000
let result = try await db.pipeline()
  .collection("books")
  .select([Field("unsoldBooks").mod(Constant(displayCapacity)).as("warehousedBooks")])
  .execute()

Kotlin

val displayCapacity = 1000
val result = db.pipeline()
    .collection("books")
    .select(Expression.mod(field("unsoldBooks"), displayCapacity).alias("warehousedBooks"))
    .execute()

Java

int displayCapacity = 1000;
Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(Expression.mod(field("unsoldBooks"), displayCapacity).alias("warehousedBooks"))
    .execute();
    
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

display_capacity = 1000
result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("unsoldBooks").mod(display_capacity).as_("warehousedBooks"))
    .execute()
)
جاوا
int displayCapacity = 1000;
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(mod(field("unsoldBooks"), displayCapacity).as("warehousedBooks"))
        .execute()
        .get();
رفتن
displayCapacity := 1000
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.Mod(firestore.FieldOf("unsoldBooks"), displayCapacity).As("warehousedBooks"),
	)).
	Execute(ctx)

CEIL

نحو:

ceil[N <: INT32 | INT64 | FLOAT64](number: N) -> N

شرح:

کوچکترین مقدار عدد صحیح را که کمتر از number نباشد برمی‌گرداند.

نمونه:

شماره ceil(number)
20 20
10 10
0 0
24L 24L
‫-۰٫۴ ‫-۰٫۰
۰٫۴ ‫۱٫۰
22.5 ۲۳
NaN NaN
+inf +inf
-inf -inf
Node.js
const booksPerShelf = 100;
const result = await db.pipeline()
  .collection("books")
  .select(
    field("unsoldBooks").divide(constant(booksPerShelf)).ceil().as("requiredShelves")
  )
  .execute();

Web

const booksPerShelf = 100;
const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("unsoldBooks").divide(constant(booksPerShelf)).ceil().as("requiredShelves")
  )
);
Swift
let booksPerShelf = 100
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("unsoldBooks").divide(Constant(booksPerShelf)).ceil().as("requiredShelves")
  ])
  .execute()

Kotlin

val booksPerShelf = 100
val result = db.pipeline()
    .collection("books")
    .select(
        Expression.divide(field("unsoldBooks"), booksPerShelf).ceil().alias("requiredShelves")
    )
    .execute()

Java

int booksPerShelf = 100;
Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        Expression.divide(field("unsoldBooks"), booksPerShelf).ceil().alias("requiredShelves")
    )
    .execute();
    
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

books_per_shelf = 100
result = (
    client.pipeline()
    .collection("books")
    .select(
        Field.of("unsoldBooks")
        .divide(books_per_shelf)
        .ceil()
        .as_("requiredShelves")
    )
    .execute()
)
جاوا
int booksPerShelf = 100;
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(ceil(divide(field("unsoldBooks"), booksPerShelf)).as("requiredShelves"))
        .execute()
        .get();
رفتن
booksPerShelf := 100
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.Ceil(firestore.Divide(firestore.FieldOf("unsoldBooks"), booksPerShelf)).As("requiredShelves"),
	)).
	Execute(ctx)

زمین

نحو:

floor[N <: INT32 | INT64 | FLOAT64](number: N) -> N

شرح:

بزرگ‌ترین مقدار عدد صحیح را که بزرگ‌تر از number نیست برمی‌گرداند.

نمونه:

شماره floor(number)
20 20
10 10
0 0
2147483648 2147483648
‫-۰٫۴ ‫۱٫۰-
۰٫۴ ۰٫۰
22.5 ۲۲٫۰
NaN NaN
+inf +inf
-inf -inf
Node.js
const result = await db.pipeline()
  .collection("books")
  .addFields(
    field("wordCount").divide(field("pages")).floor().as("wordsPerPage")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .addFields(
    field("wordCount").divide(field("pages")).floor().as("wordsPerPage")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .addFields([
    Field("wordCount").divide(Field("pages")).floor().as("wordsPerPage")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .addFields(
        Expression.divide(field("wordCount"), field("pages")).floor().alias("wordsPerPage")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .addFields(
        Expression.divide(field("wordCount"), field("pages")).floor().alias("wordsPerPage")
    )
    .execute();
    
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .add_fields(
        Field.of("wordCount").divide(Field.of("pages")).floor().as_("wordsPerPage")
    )
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .addFields(floor(divide(field("wordCount"), field("pages"))).as("wordsPerPage"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	AddFields(firestore.Selectables(
		firestore.Floor(firestore.Divide(firestore.FieldOf("wordCount"), firestore.FieldOf("pages"))).As("wordsPerPage"),
	)).
	Execute(ctx)

ROUND

نحو:

round[N <: INT32 | INT64 | FLOAT64 | DECIMAL128](number: N) -> N
round[N <: INT32 | INT64 | FLOAT64 | DECIMAL128](number: N, places: INT64) -> N

شرح:

‫places رقم number را گرد می‌کند. اگر places مثبت باشد، ارقام را از سمت راست ممیز اعشاری گرد می‌کند و اگر منفی باشد، از سمت چپ ممیز اعشاری گرد می‌کند.

  • اگر فقط number ارائه شود، به نزدیک‌ترین مقدار کامل گرد می‌شود.
  • در موارد نیمه‌راه، از صفر دور می‌شود.
  • اگر گرد کردن با مقدار منفی places منجر به سرریز شود، error ایجاد می‌شود.

نمونه:

شماره مکان‌ها round(number, places)
۱۵٫۵ 0 ۱۶٫۰
‫-۱۵٫۵ 0 ‫-۱۶٫۰
15 1 15
15 0 15
15 ۱- 20
15 ۲- 0
15.48924 1 ۱۵٫۵
‫۲۳۱-۱ ۱- [error]
263-1L ۱- [error]
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("soldBooks").multiply(field("price")).round().as("partialRevenue"))
  .aggregate(field("partialRevenue").sum().as("totalRevenue"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("soldBooks").multiply(field("price")).round().as("partialRevenue"))
  .aggregate(field("partialRevenue").sum().as("totalRevenue"))
  );
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("soldBooks").multiply(Field("price")).round().as("partialRevenue")])
  .aggregate([Field("partialRevenue").sum().as("totalRevenue")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(Expression.multiply(field("soldBooks"), field("price")).round().alias("partialRevenue"))
    .aggregate(AggregateFunction.sum("partialRevenue").alias("totalRevenue"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(Expression.multiply(field("soldBooks"), field("price")).round().alias("partialRevenue"))
    .aggregate(AggregateFunction.sum("partialRevenue").alias("totalRevenue"))
    .execute();
    
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(
        Field.of("soldBooks")
        .multiply(Field.of("price"))
        .round()
        .as_("partialRevenue")
    )
    .aggregate(Field.of("partialRevenue").sum().as_("totalRevenue"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(round(multiply(field("soldBooks"), field("price"))).as("partialRevenue"))
        .aggregate(sum("partialRevenue").as("totalRevenue"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.Round(firestore.Multiply(firestore.FieldOf("soldBooks"), firestore.FieldOf("price"))).As("partialRevenue"),
	)).
	Aggregate(firestore.Accumulators(
		firestore.Sum("partialRevenue").As("totalRevenue"),
	)).
	Execute(ctx)

TRUNC

نحو:

trunc[N <: Number](number: N) -> N
trunc[N <: Number](number:  N, places: INT64) -> N

شرح:

number را به تعداد مشخصی از places رقم اعشار کوتاه می‌کند. اگر places مثبت باشد، ارقام را از سمت راست ممیز اعشاری کوتاه می‌کند و اگر منفی باشد، از سمت چپ ممیز اعشاری کوتاه می‌کند.

  • اگر فقط number ارائه شود، به نزدیک‌ترین مقدار کامل به سمت صفر کوتاه می‌شود.
  • اگر کوتاه کردن منجر به سرریز شود، error ایجاد می‌شود.

نمونه:

شماره مکان‌ها trunc(number, places)
۱۵٫۵ 0 ۱۵
‫-۱۵٫۵ 0 ‫-۱۵٫۰
15 1 15
15 0 15
15 ۱- 10
15 ۲- 0
15.48924 1 ‫۱۵٫۴
‎-15.48924 2 ‫-۱۵٫۴۸

POW

نحو:

pow(base: FLOAT64, exponent: FLOAT64) -> FLOAT64

شرح:

مقدار base را به توان exponent می‌رساند.

  • اگر base <= 0 و exponent منفی باشد، خطا می‌دهد.

  • برای هر exponent (ازجمله NaN)، pow(1, exponent) برابر با ۱ است.

  • برای هر base (ازجمله NaN)، pow(base, 0) برابر با ۱ است.

نمونه:

پایه نما pow(base, exponent)
2 3 ۸.۰
2 ۳- ۰٫۱۲۵
+inf 0 ‫۱٫۰
1 +inf ‫۱٫۰
NaN 0 ‫۱٫۰
1 NaN ‫۱٫۰
NaN Numeric NaN
Numeric NaN NaN
۱- ۰٫۵ [error]
0 ۱- [error]
Node.js
const googleplex = { latitude: 37.4221, longitude: 122.0853 };
const result = await db.pipeline()
  .collection("cities")
  .addFields(
    field("lat").subtract(constant(googleplex.latitude))
      .multiply(111 /* km per degree */)
      .pow(2)
      .as("latitudeDifference"),
    field("lng").subtract(constant(googleplex.longitude))
      .multiply(111 /* km per degree */)
      .pow(2)
      .as("longitudeDifference")
  )
  .select(
    field("latitudeDifference").add(field("longitudeDifference")).sqrt()
      // Inaccurate for large distances or close to poles
      .as("approximateDistanceToGoogle")
  )
  .execute();

Web

const googleplex = { latitude: 37.4221, longitude: 122.0853 };
const result = await execute(db.pipeline()
  .collection("cities")
  .addFields(
    field("lat").subtract(constant(googleplex.latitude))
      .multiply(111 /* km per degree */)
      .pow(2)
      .as("latitudeDifference"),
    field("lng").subtract(constant(googleplex.longitude))
      .multiply(111 /* km per degree */)
      .pow(2)
      .as("longitudeDifference")
  )
  .select(
    field("latitudeDifference").add(field("longitudeDifference")).sqrt()
      // Inaccurate for large distances or close to poles
      .as("approximateDistanceToGoogle")
  )
);
Swift
let googleplex = CLLocation(latitude: 37.4221, longitude: 122.0853)
let result = try await db.pipeline()
  .collection("cities")
  .addFields([
    Field("lat").subtract(Constant(googleplex.coordinate.latitude))
      .multiply(111 /* km per degree */)
      .pow(2)
      .as("latitudeDifference"),
    Field("lng").subtract(Constant(googleplex.coordinate.latitude))
      .multiply(111 /* km per degree */)
      .pow(2)
      .as("longitudeDifference")
  ])
  .select([
    Field("latitudeDifference").add(Field("longitudeDifference")).sqrt()
      // Inaccurate for large distances or close to poles
      .as("approximateDistanceToGoogle")
  ])
  .execute()

Kotlin

val googleplex = GeoPoint(37.4221, -122.0853)
val result = db.pipeline()
    .collection("cities")
    .addFields(
        field("lat").subtract(googleplex.latitude)
            .multiply(111) // km per degree
            .pow(2)
            .alias("latitudeDifference"),
        field("lng").subtract(googleplex.longitude)
            .multiply(111) // km per degree
            .pow(2)
            .alias("longitudeDifference")
    )
    .select(
        field("latitudeDifference").add(field("longitudeDifference")).sqrt()
            // Inaccurate for large distances or close to poles
            .alias("approximateDistanceToGoogle")
    )
    .execute()

Java

GeoPoint googleplex = new GeoPoint(37.4221, -122.0853);
Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("cities")
    .addFields(
        field("lat").subtract(googleplex.getLatitude())
            .multiply(111 /* km per degree */)
            .pow(2)
            .alias("latitudeDifference"),
        field("lng").subtract(googleplex.getLongitude())
            .multiply(111 /* km per degree */)
            .pow(2)
            .alias("longitudeDifference")
    )
    .select(
        field("latitudeDifference").add(field("longitudeDifference")).sqrt()
            // Inaccurate for large distances or close to poles
            .alias("approximateDistanceToGoogle")
    )
    .execute();
    
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

googleplexLat = 37.4221
googleplexLng = -122.0853
result = (
    client.pipeline()
    .collection("cities")
    .add_fields(
        Field.of("lat")
        .subtract(googleplexLat)
        .multiply(111)  # km per degree
        .pow(2)
        .as_("latitudeDifference"),
        Field.of("lng")
        .subtract(googleplexLng)
        .multiply(111)  # km per degree
        .pow(2)
        .as_("longitudeDifference"),
    )
    .select(
        Field.of("latitudeDifference")
        .add(Field.of("longitudeDifference"))
        .sqrt()
        # Inaccurate for large distances or close to poles
        .as_("approximateDistanceToGoogle")
    )
    .execute()
)
جاوا
double googleplexLat = 37.4221;
double googleplexLng = -122.0853;
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("cities")
        .addFields(
            pow(multiply(subtract(field("lat"), googleplexLat), 111), 2)
                .as("latitudeDifference"),
            pow(multiply(subtract(field("lng"), googleplexLng), 111), 2)
                .as("longitudeDifference"))
        .select(
            sqrt(add(field("latitudeDifference"), field("longitudeDifference")))
                // Inaccurate for large distances or close to poles
                .as("approximateDistanceToGoogle"))
        .execute()
        .get();
رفتن
googleplexLat := 37.4221
googleplexLng := -122.0853
snapshot := client.Pipeline().
	Collection("cities").
	AddFields(firestore.Selectables(
		firestore.Pow(firestore.Multiply(firestore.Subtract(firestore.FieldOf("lat"), googleplexLat), 111), 2).As("latitudeDifference"),
		firestore.Pow(firestore.Multiply(firestore.Subtract(firestore.FieldOf("lng"), googleplexLng), 111), 2).As("longitudeDifference"),
	)).
	Select(firestore.Fields(
		firestore.Sqrt(firestore.Add(firestore.FieldOf("latitudeDifference"), firestore.FieldOf("longitudeDifference"))).
			// Inaccurate for large distances or close to poles
			As("approximateDistanceToGoogle"),
	)).
	Execute(ctx)

SQRT

نحو:

sqrt[N <: FLOAT64 | DECIMAL128](number: N) -> N

شرح:

ریشه دوم number را برمی‌گرداند.

  • اگر number منفی باشد، error را برمی‌گرداند.

نمونه:

شماره sqrt(number)
25 ‫۵.۰
۱۲٫۰۰۲ ‫۳٫۴۶۴...
۰٫۰ ۰٫۰
NaN NaN
+inf +inf
-inf [error]
x < 0 [error]
Node.js
const googleplex = { latitude: 37.4221, longitude: 122.0853 };
const result = await db.pipeline()
  .collection("cities")
  .addFields(
    field("lat").subtract(constant(googleplex.latitude))
      .multiply(111 /* km per degree */)
      .pow(2)
      .as("latitudeDifference"),
    field("lng").subtract(constant(googleplex.longitude))
      .multiply(111 /* km per degree */)
      .pow(2)
      .as("longitudeDifference")
  )
  .select(
    field("latitudeDifference").add(field("longitudeDifference")).sqrt()
      // Inaccurate for large distances or close to poles
      .as("approximateDistanceToGoogle")
  )
  .execute();

Web

const googleplex = { latitude: 37.4221, longitude: 122.0853 };
const result = await execute(db.pipeline()
  .collection("cities")
  .addFields(
    field("lat").subtract(constant(googleplex.latitude))
      .multiply(111 /* km per degree */)
      .pow(2)
      .as("latitudeDifference"),
    field("lng").subtract(constant(googleplex.longitude))
      .multiply(111 /* km per degree */)
      .pow(2)
      .as("longitudeDifference")
  )
  .select(
    field("latitudeDifference").add(field("longitudeDifference")).sqrt()
      // Inaccurate for large distances or close to poles
      .as("approximateDistanceToGoogle")
  )
);
Swift
let googleplex = CLLocation(latitude: 37.4221, longitude: 122.0853)
let result = try await db.pipeline()
  .collection("cities")
  .addFields([
    Field("lat").subtract(Constant(googleplex.coordinate.latitude))
      .multiply(111 /* km per degree */)
      .pow(2)
      .as("latitudeDifference"),
    Field("lng").subtract(Constant(googleplex.coordinate.latitude))
      .multiply(111 /* km per degree */)
      .pow(2)
      .as("longitudeDifference")
  ])
  .select([
    Field("latitudeDifference").add(Field("longitudeDifference")).sqrt()
      // Inaccurate for large distances or close to poles
      .as("approximateDistanceToGoogle")
  ])
  .execute()

Kotlin

val googleplex = GeoPoint(37.4221, -122.0853)
val result = db.pipeline()
    .collection("cities")
    .addFields(
        field("lat").subtract(googleplex.latitude)
            .multiply(111) // km per degree
            .pow(2)
            .alias("latitudeDifference"),
        field("lng").subtract(googleplex.longitude)
            .multiply(111) // km per degree
            .pow(2)
            .alias("longitudeDifference")
    )
    .select(
        field("latitudeDifference").add(field("longitudeDifference")).sqrt()
            // Inaccurate for large distances or close to poles
            .alias("approximateDistanceToGoogle")
    )
    .execute()

Java

GeoPoint googleplex = new GeoPoint(37.4221, -122.0853);
Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("cities")
    .addFields(
        field("lat").subtract(googleplex.getLatitude())
            .multiply(111 /* km per degree */)
            .pow(2)
            .alias("latitudeDifference"),
        field("lng").subtract(googleplex.getLongitude())
            .multiply(111 /* km per degree */)
            .pow(2)
            .alias("longitudeDifference")
    )
    .select(
        field("latitudeDifference").add(field("longitudeDifference")).sqrt()
            // Inaccurate for large distances or close to poles
            .alias("approximateDistanceToGoogle")
    )
    .execute();
    
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

googleplexLat = 37.4221
googleplexLng = -122.0853
result = (
    client.pipeline()
    .collection("cities")
    .add_fields(
        Field.of("lat")
        .subtract(googleplexLat)
        .multiply(111)  # km per degree
        .pow(2)
        .as_("latitudeDifference"),
        Field.of("lng")
        .subtract(googleplexLng)
        .multiply(111)  # km per degree
        .pow(2)
        .as_("longitudeDifference"),
    )
    .select(
        Field.of("latitudeDifference")
        .add(Field.of("longitudeDifference"))
        .sqrt()
        # Inaccurate for large distances or close to poles
        .as_("approximateDistanceToGoogle")
    )
    .execute()
)
جاوا
double googleplexLat = 37.4221;
double googleplexLng = -122.0853;
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("cities")
        .addFields(
            pow(multiply(subtract(field("lat"), googleplexLat), 111), 2)
                .as("latitudeDifference"),
            pow(multiply(subtract(field("lng"), googleplexLng), 111), 2)
                .as("longitudeDifference"))
        .select(
            sqrt(add(field("latitudeDifference"), field("longitudeDifference")))
                // Inaccurate for large distances or close to poles
                .as("approximateDistanceToGoogle"))
        .execute()
        .get();
رفتن
googleplexLat := 37.4221
googleplexLng := -122.0853
snapshot := client.Pipeline().
	Collection("cities").
	AddFields(firestore.Selectables(
		firestore.Pow(firestore.Multiply(firestore.Subtract(firestore.FieldOf("lat"), googleplexLat), 111), 2).As("latitudeDifference"),
		firestore.Pow(firestore.Multiply(firestore.Subtract(firestore.FieldOf("lng"), googleplexLng), 111), 2).As("longitudeDifference"),
	)).
	Select(firestore.Fields(
		firestore.Sqrt(firestore.Add(firestore.FieldOf("latitudeDifference"), firestore.FieldOf("longitudeDifference"))).
			// Inaccurate for large distances or close to poles
			As("approximateDistanceToGoogle"),
	)).
	Execute(ctx)

EXP

نحو:

exp(exponent: FLOAT64) -> FLOAT64

شرح:

مقدار عدد اویلر را به توان exponent برمی‌گرداند، که به آن تابع نمایی طبیعی نیز می‌گویند.

نمونه:

نما exp(exponent)
۰٫۰ ‫۱٫۰
10 ‫e^10‏ (FLOAT64)
NaN NaN
+inf +inf
-inf 0
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("rating").exp().as("expRating"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("rating").exp().as("expRating"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("rating").exp().as("expRating")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(field("rating").exp().alias("expRating"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(field("rating").exp().alias("expRating"))
    .execute();
    
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("rating").exp().as_("expRating"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(exp(field("rating")).as("expRating"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.Exp(firestore.FieldOf("rating")).As("expRating"),
	)).
	Execute(ctx)

LN

نحو:

ln(number: FLOAT64) -> FLOAT64

شرح:

لگاریتم طبیعی number را برمی‌گرداند. این تابع معادل log(number) است.

نمونه:

شماره ln(number)
1 ۰٫۰
2L ۰٫۶۹۳...
‫۱٫۰ ۰٫۰
‫e‏ (FLOAT64) ‫۱٫۰
NaN NaN
-inf NaN
+inf +inf
x <= 0 [error]
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("rating").ln().as("lnRating"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("rating").ln().as("lnRating"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("rating").ln().as("lnRating")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(field("rating").ln().alias("lnRating"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(field("rating").ln().alias("lnRating"))
    .execute();
    
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("rating").ln().as_("lnRating"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(ln(field("rating")).as("lnRating"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.Ln(firestore.FieldOf("rating")).As("lnRating"),
	)).
	Execute(ctx)

گزارش

نحو:

log(number: FLOAT64, base: FLOAT64) -> FLOAT64
log(number: FLOAT64) -> FLOAT64

شرح:

لگاریتم number را به base برمی‌گرداند.

  • اگر فقط number ارائه شود، لگاریتم number را به base برمی‌گرداند (مترادف با ln(number)).

نمونه:

شماره پایه log(number, base)
100 10 ‫۲٫۰
NaN Numeric NaN
Numeric NaN NaN
-inf Numeric NaN
Numeric. +inf NaN
number <= 0 Numeric [error]
Numeric base <= 0 [error]
Numeric ‫۱٫۰ [error]

LOG10

نحو:

log10(x: FLOAT64) -> FLOAT64

شرح:

لگاریتم number را در مبنای 10 برمی‌گرداند.

نمونه:

شماره log10(number)
100 ‫۲٫۰
NaN NaN
-inf NaN
+inf +inf
x <= 0 [error]

راند

نحو:

rand() -> FLOAT64

شرح:

عدد ممیز شناور شبه‌تصادفی را که به‌طور یکنواخت بین 0.0 (شامل) و 1.0 (غیرشامل) انتخاب شده است برمی‌گرداند.

توابع آرایه

نام شرح
ARRAY یک ARRAY حاوی یک عنصر برای هر متغیر مستقل ورودی برمی‌گرداند
ARRAY_CONCAT چندین آرایه را در یک ARRAY واحد به‌هم متصل می‌کند
ARRAY_CONTAINS اگر ARRAY داده‌شده حاوی مقدار خاصی باشد، TRUE را برمی‌گرداند
ARRAY_CONTAINS_ALL اگر همه مقادیر در ARRAY وجود داشته باشد، TRUE را برمی‌گرداند
ARRAY_CONTAINS_ANY اگر هرکدام از مقادیر در ARRAY وجود داشته باشد، TRUE را برمی‌گرداند
ARRAY_FILTER عناصر را از ARRAY که گزاره را برآورده نمی‌کنند فیلتر می‌کند
ARRAY_FIRST اولین عنصر را در ARRAY برمی‌گرداند
ARRAY_FIRST_N اولین عناصر n را در ARRAY برمی‌گرداند
ARRAY_GET عنصر را در نمایه داده‌شده در ARRAY برمی‌گرداند
ARRAY_INDEX_OF نمایه اولین رخداد یک مقدار را در ARRAY برمی‌گرداند
ARRAY_INDEX_OF_ALL همه نمایه‌های یک مقدار را در ARRAY برمی‌گرداند
ARRAY_LENGTH تعداد عناصر را در ARRAY برمی‌گرداند
ARRAY_LAST آخرین عنصر را در ARRAY برمی‌گرداند
ARRAY_LAST_N آخرین عناصر n را در ARRAY برمی‌گرداند
ARRAY_REVERSE ترتیب عناصر را در ARRAY معکوس می‌کند
ARRAY_SLICE برشی از ARRAY را برمی‌گرداند
ARRAY_TRANSFORM عناصر را در ARRAY با اعمال عبارت بر هر عنصر تبدیل می‌کند
MAXIMUM بیشترین مقدار را در ARRAY نتیجه می‌دهد
MAXIMUM_N n بزرگ‌ترین مقدار را در ARRAY برمی‌گرداند
MINIMUM کمترین مقدار را در ARRAY برمی‌گرداند
MINIMUM_N n کوچک‌ترین مقدار را در ARRAY برمی‌گرداند
SUM مجموع همه مقادیر NUMERIC را در ARRAY برمی‌گرداند.
JOIN الحاقی از عناصر را در ARRAY به‌عنوان مقدار STRING تولید می‌کند.

آرایه

نحو:

array(values: ANY...) -> ARRAY

شرح:

آرایه‌ای از عناصر ارائه‌شده می‌سازد.

  • اگر آرگومانی وجود نداشته باشد، با NULL در آرایه حاصل جایگزین می‌شود.

نمونه:

مقادیر array(values)
() [زود می‌آیی][زود می‌آیین][زود میآیی][زود میآیین][الآن می‌آیی][الآن می‌آیین][الآن میایی][الآن میایین][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][کی می‌رسی][کی می‌رسین][کی می‌رسید][کی می‌رسی اینجا][کی می‌رسین اینجا][کی می‌رسید اینجا][کی می‌رسی آنجا][کی می‌رسین آنجا][کی می‌رسید آنجا][کی می‌رسی اونجا][کی می‌رسین اونجا][کی می‌رسید اونجا][کی اینجا می‌رسی][کی اینجا می‌رسین][کی اینجا می‌رسید][کی میرسی اینجا][کی میرسین اینجا][کی میرسید اینجا][کی فکر می‌کنی میرسی][کی فکر می‌کنی میرسین][کی فکر می‌کنی میرسید][کی فکر میکنی میرسی][کی فکر میکنی میرسین][کی فکر میکنی میرسید][تا کی میرسی][تا کی میرسین][تا کی میرسید][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][چقدر دیگه می‌رسید][فکر می‌کنی چقدر دیگه برسی][فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسی][حدوداً کی می‌رسی][حدوداً کی می‌رسین][حدوداً کی می‌رسید][کی فکر می‌کنی اینجایی][کی فکر می‌کنی اینجایین][کی فکر می‌کنی اینجایید][کی فکر میکنی اونجایی][کی فکر میکنی اونجایی][کی فکر میکنی اونجایید][چند دقیقه دیگه؟][کی؟][حدوداً؟][فکر می‌کنی چقدر دیگه برسی][[فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسید]فکر می‌کنی چند دقیقه دیگه؟][فکرمیکنی کی؟][فکر می‌کنی چند دقیقه دیگه؟][فکرمی‌کنی کی؟][فکر میکنی چند دقیقه دیگه؟][زمان تقریبی ورود؟][زمان تقریبی رسیدن؟][تقریباً؟][نزدیکی؟][چقدر دیگه؟][کی؟][اینجا؟][اونجا؟][آنجا؟][سر میدونی؟][سر میدونین؟][سر کوچه‌ای؟][سر کوچه‌این؟][پشت دری؟][پشت درین؟][حالا؟]
(۱، ۲، ۳) [۱، ۲، ۳]
("a", 1, true) ["a", 1, true]
(۱، خالی) [۱، خالی]
(۱، [۲، ۳]) [1, [2, 3]]

ARRAY_CONCAT

نحو:

array_concat(arrays: ARRAY...) -> ARRAY

شرح:

دو یا چند آرایه را در یک ARRAY واحد به‌هم متصل می‌کند.

نمونه:

آرایه‌ها array_concat(arrays)
([1, 2], [3, 4]) [1, 2, 3, 4]
(["a", "b"], ["c"]) ["a", "b", "c"]
([1], [2], [3]) [۱، ۲، ۳]
([], [1, 2]) [۱، ۲]
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("genre").arrayConcat([field("subGenre")]).as("allGenres"))
  .execute();
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("genre").arrayConcat([Field("subGenre")]).as("allGenres")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(field("genre").arrayConcat(field("subGenre")).alias("allGenres"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(field("genre").arrayConcat(field("subGenre")).alias("allGenres"))
    .execute();
    
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("genre").array_concat(Field.of("subGenre")).as_("allGenres"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(arrayConcat(field("genre"), field("subGenre")).as("allGenres"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.ArrayConcat(firestore.FieldOf("genre"), firestore.FieldOf("subGenre")).As("allGenres"),
	)).
	Execute(ctx)

ARRAY_CONTAINS

نحو:

array_contains(array: ARRAY, value: ANY) -> BOOLEAN

شرح:

اگر value در array پیدا شود، TRUE را برمی‌گرداند و درغیراین‌صورت FALSE را برمی‌گرداند.

نمونه:

آرایه مقدار array_contains(array, value)
[۱، ۲، ۳] 2 درست
[[1, 2], [3]] [۱، ۲] درست
[۱، خالی] تهی درست
«abc» همه خطا
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("genre").arrayContains(constant("mystery")).as("isMystery"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("genre").arrayContains(constant("mystery")).as("isMystery"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("genre").arrayContains(Constant("mystery")).as("isMystery")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(field("genre").arrayContains("mystery").alias("isMystery"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(field("genre").arrayContains("mystery").alias("isMystery"))
    .execute();
    
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("genre").array_contains("mystery").as_("isMystery"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(arrayContains(field("genre"), "mystery").as("isMystery"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.ArrayContains(firestore.FieldOf("genre"), "mystery").As("isMystery"),
	)).
	Execute(ctx)

ARRAY_CONTAINS_ALL

نحو:

array_contains_all(array: ARRAY, search_values: ARRAY) -> BOOLEAN

شرح:

اگر همه search_values در array پیدا شوند، TRUE را برمی‌گرداند و درغیراین‌صورت FALSE را برمی‌گرداند.

نمونه:

آرایه search_values array_contains_all(array, search_values)
[۱، ۲، ۳] [۱، ۲] درست
[۱، ۲، ۳] [۱، ۴] نادرست
[۱، خالی] [null] درست
[NaN] [NaN] درست
[زود می‌آیی][زود می‌آیین][زود میآیی][زود میآیین][الآن می‌آیی][الآن می‌آیین][الآن میایی][الآن میایین][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][کی می‌رسی][کی می‌رسین][کی می‌رسید][کی می‌رسی اینجا][کی می‌رسین اینجا][کی می‌رسید اینجا][کی می‌رسی آنجا][کی می‌رسین آنجا][کی می‌رسید آنجا][کی می‌رسی اونجا][کی می‌رسین اونجا][کی می‌رسید اونجا][کی اینجا می‌رسی][کی اینجا می‌رسین][کی اینجا می‌رسید][کی میرسی اینجا][کی میرسین اینجا][کی میرسید اینجا][کی فکر می‌کنی میرسی][کی فکر می‌کنی میرسین][کی فکر می‌کنی میرسید][کی فکر میکنی میرسی][کی فکر میکنی میرسین][کی فکر میکنی میرسید][تا کی میرسی][تا کی میرسین][تا کی میرسید][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][چقدر دیگه می‌رسید][فکر می‌کنی چقدر دیگه برسی][فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسی][حدوداً کی می‌رسی][حدوداً کی می‌رسین][حدوداً کی می‌رسید][کی فکر می‌کنی اینجایی][کی فکر می‌کنی اینجایین][کی فکر می‌کنی اینجایید][کی فکر میکنی اونجایی][کی فکر میکنی اونجایی][کی فکر میکنی اونجایید][چند دقیقه دیگه؟][کی؟][حدوداً؟][فکر می‌کنی چقدر دیگه برسی][[فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسید]فکر می‌کنی چند دقیقه دیگه؟][فکرمیکنی کی؟][فکر می‌کنی چند دقیقه دیگه؟][فکرمی‌کنی کی؟][فکر میکنی چند دقیقه دیگه؟][زمان تقریبی ورود؟][زمان تقریبی رسیدن؟][تقریباً؟][نزدیکی؟][چقدر دیگه؟][کی؟][اینجا؟][اونجا؟][آنجا؟][سر میدونی؟][سر میدونین؟][سر کوچه‌ای؟][سر کوچه‌این؟][پشت دری؟][پشت درین؟][حالا؟] [زود می‌آیی][زود می‌آیین][زود میآیی][زود میآیین][الآن می‌آیی][الآن می‌آیین][الآن میایی][الآن میایین][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][کی می‌رسی][کی می‌رسین][کی می‌رسید][کی می‌رسی اینجا][کی می‌رسین اینجا][کی می‌رسید اینجا][کی می‌رسی آنجا][کی می‌رسین آنجا][کی می‌رسید آنجا][کی می‌رسی اونجا][کی می‌رسین اونجا][کی می‌رسید اونجا][کی اینجا می‌رسی][کی اینجا می‌رسین][کی اینجا می‌رسید][کی میرسی اینجا][کی میرسین اینجا][کی میرسید اینجا][کی فکر می‌کنی میرسی][کی فکر می‌کنی میرسین][کی فکر می‌کنی میرسید][کی فکر میکنی میرسی][کی فکر میکنی میرسین][کی فکر میکنی میرسید][تا کی میرسی][تا کی میرسین][تا کی میرسید][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][چقدر دیگه می‌رسید][فکر می‌کنی چقدر دیگه برسی][فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسی][حدوداً کی می‌رسی][حدوداً کی می‌رسین][حدوداً کی می‌رسید][کی فکر می‌کنی اینجایی][کی فکر می‌کنی اینجایین][کی فکر می‌کنی اینجایید][کی فکر میکنی اونجایی][کی فکر میکنی اونجایی][کی فکر میکنی اونجایید][چند دقیقه دیگه؟][کی؟][حدوداً؟][فکر می‌کنی چقدر دیگه برسی][[فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسید]فکر می‌کنی چند دقیقه دیگه؟][فکرمیکنی کی؟][فکر می‌کنی چند دقیقه دیگه؟][فکرمی‌کنی کی؟][فکر میکنی چند دقیقه دیگه؟][زمان تقریبی ورود؟][زمان تقریبی رسیدن؟][تقریباً؟][نزدیکی؟][چقدر دیگه؟][کی؟][اینجا؟][اونجا؟][آنجا؟][سر میدونی؟][سر میدونین؟][سر کوچه‌ای؟][سر کوچه‌این؟][پشت دری؟][پشت درین؟][حالا؟] درست
[۱، ۲، ۳] [زود می‌آیی][زود می‌آیین][زود میآیی][زود میآیین][الآن می‌آیی][الآن می‌آیین][الآن میایی][الآن میایین][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][کی می‌رسی][کی می‌رسین][کی می‌رسید][کی می‌رسی اینجا][کی می‌رسین اینجا][کی می‌رسید اینجا][کی می‌رسی آنجا][کی می‌رسین آنجا][کی می‌رسید آنجا][کی می‌رسی اونجا][کی می‌رسین اونجا][کی می‌رسید اونجا][کی اینجا می‌رسی][کی اینجا می‌رسین][کی اینجا می‌رسید][کی میرسی اینجا][کی میرسین اینجا][کی میرسید اینجا][کی فکر می‌کنی میرسی][کی فکر می‌کنی میرسین][کی فکر می‌کنی میرسید][کی فکر میکنی میرسی][کی فکر میکنی میرسین][کی فکر میکنی میرسید][تا کی میرسی][تا کی میرسین][تا کی میرسید][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][چقدر دیگه می‌رسید][فکر می‌کنی چقدر دیگه برسی][فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسی][حدوداً کی می‌رسی][حدوداً کی می‌رسین][حدوداً کی می‌رسید][کی فکر می‌کنی اینجایی][کی فکر می‌کنی اینجایین][کی فکر می‌کنی اینجایید][کی فکر میکنی اونجایی][کی فکر میکنی اونجایی][کی فکر میکنی اونجایید][چند دقیقه دیگه؟][کی؟][حدوداً؟][فکر می‌کنی چقدر دیگه برسی][[فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسید]فکر می‌کنی چند دقیقه دیگه؟][فکرمیکنی کی؟][فکر می‌کنی چند دقیقه دیگه؟][فکرمی‌کنی کی؟][فکر میکنی چند دقیقه دیگه؟][زمان تقریبی ورود؟][زمان تقریبی رسیدن؟][تقریباً؟][نزدیکی؟][چقدر دیگه؟][کی؟][اینجا؟][اونجا؟][آنجا؟][سر میدونی؟][سر میدونین؟][سر کوچه‌ای؟][سر کوچه‌این؟][پشت دری؟][پشت درین؟][حالا؟] درست
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(
    field("genre")
      .arrayContainsAll([constant("fantasy"), constant("adventure")])
      .as("isFantasyAdventure")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("genre")
      .arrayContainsAll([constant("fantasy"), constant("adventure")])
      .as("isFantasyAdventure")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("genre")
      .arrayContainsAll([Constant("fantasy"), Constant("adventure")])
      .as("isFantasyAdventure")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        field("genre")
            .arrayContainsAll(listOf("fantasy", "adventure"))
            .alias("isFantasyAdventure")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("genre")
            .arrayContainsAll(Arrays.asList("fantasy", "adventure"))
            .alias("isFantasyAdventure")
    )
    .execute();
    
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(
        Field.of("genre")
        .array_contains_all(["fantasy", "adventure"])
        .as_("isFantasyAdventure")
    )
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(
            arrayContainsAll(field("genre"), Arrays.asList("fantasy", "adventure"))
                .as("isFantasyAdventure"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.ArrayContainsAll(firestore.FieldOf("genre"), []string{"fantasy", "adventure"}).As("isFantasyAdventure"),
	)).
	Execute(ctx)

ARRAY_CONTAINS_ANY

نحو:

array_contains_any(array: ARRAY, search_values: ARRAY) -> BOOLEAN

شرح:

اگر هرکدام از search_values در array پیدا شود، TRUE را برمی‌گرداند و درغیراین‌صورت FALSE را برمی‌گرداند.

نمونه:

آرایه search_values array_contains_any(array, search_values)
[۱، ۲، ۳] [۴، ۱] درست
[۱، ۲، ۳] [۴، ۵] نادرست
[1, 2, null] [null] درست
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(
    field("genre")
      .arrayContainsAny([constant("fantasy"), constant("nonfiction")])
      .as("isMysteryOrFantasy")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("genre")
      .arrayContainsAny([constant("fantasy"), constant("nonfiction")])
      .as("isMysteryOrFantasy")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("genre")
      .arrayContainsAny([Constant("fantasy"), Constant("nonfiction")])
      .as("isMysteryOrFantasy")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        field("genre")
            .arrayContainsAny(listOf("fantasy", "nonfiction"))
            .alias("isMysteryOrFantasy")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("genre")
            .arrayContainsAny(Arrays.asList("fantasy", "nonfiction"))
            .alias("isMysteryOrFantasy")
    )
    .execute();
    
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(
        Field.of("genre")
        .array_contains_any(["fantasy", "nonfiction"])
        .as_("isMysteryOrFantasy")
    )
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(
            arrayContainsAny(field("genre"), Arrays.asList("fantasy", "nonfiction"))
                .as("isMysteryOrFantasy"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.ArrayContainsAny(firestore.FieldOf("genre"), []string{"fantasy", "nonfiction"}).As("isMysteryOrFantasy"),
	)).
	Execute(ctx)

ARRAY_FILTER

نحو:

array_filter(array: ARRAY, predicate: (ANY) -> BOOLEAN) -> ARRAY

شرح:

array را بااستفاده از عبارت predicate فیلتر می‌کند و آرایه جدیدی را که فقط شامل عناصر برآورده‌کننده گزاره است برمی‌گرداند.

  • برای هر عنصر در array، predicate ارزیابی می‌شود. اگر true را برگرداند، عنصر در نتیجه گنجانده می‌شود؛ درغیراین‌صورت (اگر false یا null را برگرداند)، حذف می‌شود.
  • اگر predicate به مقدار غیربولی یا غیرتهی ارزیابی شود، تابع خطا برمی‌گرداند.

نمونه:

آرایه گزاره array_filter(array, predicate)
[۱، ۲، ۳] x -> x > 1 [۲، ۳]
[1, null, 3] x -> x > 1 [۳]
["a", "b", "c"] x -> x != "b" ["a", "c"]
[زود می‌آیی][زود می‌آیین][زود میآیی][زود میآیین][الآن می‌آیی][الآن می‌آیین][الآن میایی][الآن میایین][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][کی می‌رسی][کی می‌رسین][کی می‌رسید][کی می‌رسی اینجا][کی می‌رسین اینجا][کی می‌رسید اینجا][کی می‌رسی آنجا][کی می‌رسین آنجا][کی می‌رسید آنجا][کی می‌رسی اونجا][کی می‌رسین اونجا][کی می‌رسید اونجا][کی اینجا می‌رسی][کی اینجا می‌رسین][کی اینجا می‌رسید][کی میرسی اینجا][کی میرسین اینجا][کی میرسید اینجا][کی فکر می‌کنی میرسی][کی فکر می‌کنی میرسین][کی فکر می‌کنی میرسید][کی فکر میکنی میرسی][کی فکر میکنی میرسین][کی فکر میکنی میرسید][تا کی میرسی][تا کی میرسین][تا کی میرسید][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][چقدر دیگه می‌رسید][فکر می‌کنی چقدر دیگه برسی][فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسی][حدوداً کی می‌رسی][حدوداً کی می‌رسین][حدوداً کی می‌رسید][کی فکر می‌کنی اینجایی][کی فکر می‌کنی اینجایین][کی فکر می‌کنی اینجایید][کی فکر میکنی اونجایی][کی فکر میکنی اونجایی][کی فکر میکنی اونجایید][چند دقیقه دیگه؟][کی؟][حدوداً؟][فکر می‌کنی چقدر دیگه برسی][[فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسید]فکر می‌کنی چند دقیقه دیگه؟][فکرمیکنی کی؟][فکر می‌کنی چند دقیقه دیگه؟][فکرمی‌کنی کی؟][فکر میکنی چند دقیقه دیگه؟][زمان تقریبی ورود؟][زمان تقریبی رسیدن؟][تقریباً؟][نزدیکی؟][چقدر دیگه؟][کی؟][اینجا؟][اونجا؟][آنجا؟][سر میدونی؟][سر میدونین؟][سر کوچه‌ای؟][سر کوچه‌این؟][پشت دری؟][پشت درین؟][حالا؟] x -> true [زود می‌آیی][زود می‌آیین][زود میآیی][زود میآیین][الآن می‌آیی][الآن می‌آیین][الآن میایی][الآن میایین][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][کی می‌رسی][کی می‌رسین][کی می‌رسید][کی می‌رسی اینجا][کی می‌رسین اینجا][کی می‌رسید اینجا][کی می‌رسی آنجا][کی می‌رسین آنجا][کی می‌رسید آنجا][کی می‌رسی اونجا][کی می‌رسین اونجا][کی می‌رسید اونجا][کی اینجا می‌رسی][کی اینجا می‌رسین][کی اینجا می‌رسید][کی میرسی اینجا][کی میرسین اینجا][کی میرسید اینجا][کی فکر می‌کنی میرسی][کی فکر می‌کنی میرسین][کی فکر می‌کنی میرسید][کی فکر میکنی میرسی][کی فکر میکنی میرسین][کی فکر میکنی میرسید][تا کی میرسی][تا کی میرسین][تا کی میرسید][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][چقدر دیگه می‌رسید][فکر می‌کنی چقدر دیگه برسی][فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسی][حدوداً کی می‌رسی][حدوداً کی می‌رسین][حدوداً کی می‌رسید][کی فکر می‌کنی اینجایی][کی فکر می‌کنی اینجایین][کی فکر می‌کنی اینجایید][کی فکر میکنی اونجایی][کی فکر میکنی اونجایی][کی فکر میکنی اونجایید][چند دقیقه دیگه؟][کی؟][حدوداً؟][فکر می‌کنی چقدر دیگه برسی][[فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسید]فکر می‌کنی چند دقیقه دیگه؟][فکرمیکنی کی؟][فکر می‌کنی چند دقیقه دیگه؟][فکرمی‌کنی کی؟][فکر میکنی چند دقیقه دیگه؟][زمان تقریبی ورود؟][زمان تقریبی رسیدن؟][تقریباً؟][نزدیکی؟][چقدر دیگه؟][کی؟][اینجا؟][اونجا؟][آنجا؟][سر میدونی؟][سر میدونین؟][سر کوچه‌ای؟][سر کوچه‌این؟][پشت دری؟][پشت درین؟][حالا؟]

ARRAY_GET

نحو:

array_get(array: ARRAY, index: INT64) -> ANY

شرح:

عنصر را در index مبتنی بر ۰ در array برمی‌گرداند.

  • اگر index منفی باشد، عناصر از انتهای آرایه قابل‌دسترسی هستند، که -1 آخرین عنصر است.
  • اگر array از نوع ARRAY و نه null باشد، خطایی برمی‌گرداند.
  • اگر index خارج‌از محدوده باشد، تابع مقدار غایب را برمی‌گرداند.
  • اگر index از نوع INT64 نباشد، تابع خطا برمی‌گرداند.

نمونه:

آرایه شاخص array_get(array, index)
[۱، ۲، ۳] 0 1
[۱، ۲، ۳] ۱- 3
[۱، ۲، ۳] 3 غایب
[۱، ۲، ۳] -4 غایب
«abc» 0 خطا
تهی 0 تهی
Array «a» خطا
Array ‫۲٫۰ خطا

ARRAY_LENGTH

نحو:

array_length(array: ARRAY) -> INT64

شرح:

تعداد عناصر را در array برمی‌گرداند.

نمونه:

آرایه array_length(array)
[۱، ۲، ۳] 3
[زود می‌آیی][زود می‌آیین][زود میآیی][زود میآیین][الآن می‌آیی][الآن می‌آیین][الآن میایی][الآن میایین][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][کی می‌رسی][کی می‌رسین][کی می‌رسید][کی می‌رسی اینجا][کی می‌رسین اینجا][کی می‌رسید اینجا][کی می‌رسی آنجا][کی می‌رسین آنجا][کی می‌رسید آنجا][کی می‌رسی اونجا][کی می‌رسین اونجا][کی می‌رسید اونجا][کی اینجا می‌رسی][کی اینجا می‌رسین][کی اینجا می‌رسید][کی میرسی اینجا][کی میرسین اینجا][کی میرسید اینجا][کی فکر می‌کنی میرسی][کی فکر می‌کنی میرسین][کی فکر می‌کنی میرسید][کی فکر میکنی میرسی][کی فکر میکنی میرسین][کی فکر میکنی میرسید][تا کی میرسی][تا کی میرسین][تا کی میرسید][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][چقدر دیگه می‌رسید][فکر می‌کنی چقدر دیگه برسی][فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسی][حدوداً کی می‌رسی][حدوداً کی می‌رسین][حدوداً کی می‌رسید][کی فکر می‌کنی اینجایی][کی فکر می‌کنی اینجایین][کی فکر می‌کنی اینجایید][کی فکر میکنی اونجایی][کی فکر میکنی اونجایی][کی فکر میکنی اونجایید][چند دقیقه دیگه؟][کی؟][حدوداً؟][فکر می‌کنی چقدر دیگه برسی][[فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسید]فکر می‌کنی چند دقیقه دیگه؟][فکرمیکنی کی؟][فکر می‌کنی چند دقیقه دیگه؟][فکرمی‌کنی کی؟][فکر میکنی چند دقیقه دیگه؟][زمان تقریبی ورود؟][زمان تقریبی رسیدن؟][تقریباً؟][نزدیکی؟][چقدر دیگه؟][کی؟][اینجا؟][اونجا؟][آنجا؟][سر میدونی؟][سر میدونین؟][سر کوچه‌ای؟][سر کوچه‌این؟][پشت دری؟][پشت درین؟][حالا؟] 0
[1, 1, 1] 3
[۱، خالی] 2
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("genre").arrayLength().as("genreCount"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("genre").arrayLength().as("genreCount"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("genre").arrayLength().as("genreCount")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(field("genre").arrayLength().alias("genreCount"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(field("genre").arrayLength().alias("genreCount"))
    .execute();
    
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("genre").array_length().as_("genreCount"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(arrayLength(field("genre")).as("genreCount"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.ArrayLength(firestore.FieldOf("genre")).As("genreCount"),
	)).
	Execute(ctx)

ARRAY_REVERSE

نحو:

array_reverse(array: ARRAY) -> ARRAY

شرح:

array داده‌شده را معکوس می‌کند.

نمونه:

آرایه array_reverse(array)
[۱، ۲، ۳] [3, 2, 1]
["a", "b"] ["b", "a"]
[1, 2, 2, 3] [3, 2, 2, 1]
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(arrayReverse(field("genre")).as("reversedGenres"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("genre").arrayReverse().as("reversedGenres"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("genre").arrayReverse().as("reversedGenres")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(field("genre").arrayReverse().alias("reversedGenres"))
    .execute()
    

Java

Task<Pipeline.Snapshot> result = db.pipeline() .collection("books") .select(field("genre").arrayReverse().alias("reversedGenres")) .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("genre").array_reverse().as_("reversedGenres"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(arrayReverse(field("genre")).as("reversedGenres"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.ArrayReverse(firestore.FieldOf("genre")).As("reversedGenres"),
	)).
	Execute(ctx)

ARRAY_FIRST

نحو:

array_first(array: ARRAY) -> ANY

شرح:

اولین عنصر را در array برمی‌گرداند. این معادل array_get(array, 0) است.

  • اگر array خالی باشد، مقدار غایب را برمی‌گرداند.

نمونه:

آرایه array_first(array)
[۱، ۲، ۳] 1
[زود می‌آیی][زود می‌آیین][زود میآیی][زود میآیین][الآن می‌آیی][الآن می‌آیین][الآن میایی][الآن میایین][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][کی می‌رسی][کی می‌رسین][کی می‌رسید][کی می‌رسی اینجا][کی می‌رسین اینجا][کی می‌رسید اینجا][کی می‌رسی آنجا][کی می‌رسین آنجا][کی می‌رسید آنجا][کی می‌رسی اونجا][کی می‌رسین اونجا][کی می‌رسید اونجا][کی اینجا می‌رسی][کی اینجا می‌رسین][کی اینجا می‌رسید][کی میرسی اینجا][کی میرسین اینجا][کی میرسید اینجا][کی فکر می‌کنی میرسی][کی فکر می‌کنی میرسین][کی فکر می‌کنی میرسید][کی فکر میکنی میرسی][کی فکر میکنی میرسین][کی فکر میکنی میرسید][تا کی میرسی][تا کی میرسین][تا کی میرسید][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][چقدر دیگه می‌رسید][فکر می‌کنی چقدر دیگه برسی][فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسی][حدوداً کی می‌رسی][حدوداً کی می‌رسین][حدوداً کی می‌رسید][کی فکر می‌کنی اینجایی][کی فکر می‌کنی اینجایین][کی فکر می‌کنی اینجایید][کی فکر میکنی اونجایی][کی فکر میکنی اونجایی][کی فکر میکنی اونجایید][چند دقیقه دیگه؟][کی؟][حدوداً؟][فکر می‌کنی چقدر دیگه برسی][[فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسید]فکر می‌کنی چند دقیقه دیگه؟][فکرمیکنی کی؟][فکر می‌کنی چند دقیقه دیگه؟][فکرمی‌کنی کی؟][فکر میکنی چند دقیقه دیگه؟][زمان تقریبی ورود؟][زمان تقریبی رسیدن؟][تقریباً؟][نزدیکی؟][چقدر دیگه؟][کی؟][اینجا؟][اونجا؟][آنجا؟][سر میدونی؟][سر میدونین؟][سر کوچه‌ای؟][سر کوچه‌این؟][پشت دری؟][پشت درین؟][حالا؟] غایب

ARRAY_FIRST_N

نحو:

array_first_n(array: ARRAY, n: INT64) -> ARRAY

شرح:

اولین n عنصر array را برمی‌گرداند. این معادل array_slice(array, 0, n) است.

  • اگر n منفی باشد، خطا برمی‌گرداند.

نمونه:

آرایه n array_first_n(array, n)
[1, 2, 3, 4, 5] 3 [۱، ۲، ۳]
[۱، ۲] 3 [۱، ۲]
[۱، ۲، ۳] 0 [زود می‌آیی][زود می‌آیین][زود میآیی][زود میآیین][الآن می‌آیی][الآن می‌آیین][الآن میایی][الآن میایین][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][کی می‌رسی][کی می‌رسین][کی می‌رسید][کی می‌رسی اینجا][کی می‌رسین اینجا][کی می‌رسید اینجا][کی می‌رسی آنجا][کی می‌رسین آنجا][کی می‌رسید آنجا][کی می‌رسی اونجا][کی می‌رسین اونجا][کی می‌رسید اونجا][کی اینجا می‌رسی][کی اینجا می‌رسین][کی اینجا می‌رسید][کی میرسی اینجا][کی میرسین اینجا][کی میرسید اینجا][کی فکر می‌کنی میرسی][کی فکر می‌کنی میرسین][کی فکر می‌کنی میرسید][کی فکر میکنی میرسی][کی فکر میکنی میرسین][کی فکر میکنی میرسید][تا کی میرسی][تا کی میرسین][تا کی میرسید][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][چقدر دیگه می‌رسید][فکر می‌کنی چقدر دیگه برسی][فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسی][حدوداً کی می‌رسی][حدوداً کی می‌رسین][حدوداً کی می‌رسید][کی فکر می‌کنی اینجایی][کی فکر می‌کنی اینجایین][کی فکر می‌کنی اینجایید][کی فکر میکنی اونجایی][کی فکر میکنی اونجایی][کی فکر میکنی اونجایید][چند دقیقه دیگه؟][کی؟][حدوداً؟][فکر می‌کنی چقدر دیگه برسی][[فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسید]فکر می‌کنی چند دقیقه دیگه؟][فکرمیکنی کی؟][فکر می‌کنی چند دقیقه دیگه؟][فکرمی‌کنی کی؟][فکر میکنی چند دقیقه دیگه؟][زمان تقریبی ورود؟][زمان تقریبی رسیدن؟][تقریباً؟][نزدیکی؟][چقدر دیگه؟][کی؟][اینجا؟][اونجا؟][آنجا؟][سر میدونی؟][سر میدونین؟][سر کوچه‌ای؟][سر کوچه‌این؟][پشت دری؟][پشت درین؟][حالا؟]

ARRAY_INDEX_OF

نحو:

array_index_of(array: ARRAY, value: ANY) -> INT64

شرح:

نمایه مبتنی بر ۰ اولین رخداد value را در array برمی‌گرداند. اگر value پیدا نشود، عدد ۱- را برمی‌گرداند.

نمونه:

آرایه مقدار array_index_of(array, value)
[1, 2, 3, 2] 2 1
[۱، ۲، ۳] 4 ۱-
[1, null, 3] تهی 1

ARRAY_INDEX_OF_ALL

نحو:

array_index_of_all(array: ARRAY, value: ANY) -> ARRAY<INT64>

شرح:

آرایه‌ای حاوی نمایه‌های مبتنی بر ۰ از همه موارد وقوع value در array را برمی‌گرداند. اگر value پیدا نشود، [] را برمی‌گرداند.

نمونه:

آرایه مقدار array_index_of_all(array, value)
[1, 2, 3, 2] 2 [۱، ۳]
[۱، ۲، ۳] 4 [زود می‌آیی][زود می‌آیین][زود میآیی][زود میآیین][الآن می‌آیی][الآن می‌آیین][الآن میایی][الآن میایین][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][کی می‌رسی][کی می‌رسین][کی می‌رسید][کی می‌رسی اینجا][کی می‌رسین اینجا][کی می‌رسید اینجا][کی می‌رسی آنجا][کی می‌رسین آنجا][کی می‌رسید آنجا][کی می‌رسی اونجا][کی می‌رسین اونجا][کی می‌رسید اونجا][کی اینجا می‌رسی][کی اینجا می‌رسین][کی اینجا می‌رسید][کی میرسی اینجا][کی میرسین اینجا][کی میرسید اینجا][کی فکر می‌کنی میرسی][کی فکر می‌کنی میرسین][کی فکر می‌کنی میرسید][کی فکر میکنی میرسی][کی فکر میکنی میرسین][کی فکر میکنی میرسید][تا کی میرسی][تا کی میرسین][تا کی میرسید][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][چقدر دیگه می‌رسید][فکر می‌کنی چقدر دیگه برسی][فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسی][حدوداً کی می‌رسی][حدوداً کی می‌رسین][حدوداً کی می‌رسید][کی فکر می‌کنی اینجایی][کی فکر می‌کنی اینجایین][کی فکر می‌کنی اینجایید][کی فکر میکنی اونجایی][کی فکر میکنی اونجایی][کی فکر میکنی اونجایید][چند دقیقه دیگه؟][کی؟][حدوداً؟][فکر می‌کنی چقدر دیگه برسی][[فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسید]فکر می‌کنی چند دقیقه دیگه؟][فکرمیکنی کی؟][فکر می‌کنی چند دقیقه دیگه؟][فکرمی‌کنی کی؟][فکر میکنی چند دقیقه دیگه؟][زمان تقریبی ورود؟][زمان تقریبی رسیدن؟][تقریباً؟][نزدیکی؟][چقدر دیگه؟][کی؟][اینجا؟][اونجا؟][آنجا؟][سر میدونی؟][سر میدونین؟][سر کوچه‌ای؟][سر کوچه‌این؟][پشت دری؟][پشت درین؟][حالا؟]
[1, null, 3, null] تهی [۱، ۳]

ARRAY_LAST

نحو:

array_last(array: ARRAY) -> ANY

شرح:

آخرین عنصر را در array برمی‌گرداند. این معادل array_get(array, -1) است.

  • اگر array خالی باشد، مقدار غایب را برمی‌گرداند.

نمونه:

آرایه array_last(array)
[۱، ۲، ۳] 3
[زود می‌آیی][زود می‌آیین][زود میآیی][زود میآیین][الآن می‌آیی][الآن می‌آیین][الآن میایی][الآن میایین][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][کی می‌رسی][کی می‌رسین][کی می‌رسید][کی می‌رسی اینجا][کی می‌رسین اینجا][کی می‌رسید اینجا][کی می‌رسی آنجا][کی می‌رسین آنجا][کی می‌رسید آنجا][کی می‌رسی اونجا][کی می‌رسین اونجا][کی می‌رسید اونجا][کی اینجا می‌رسی][کی اینجا می‌رسین][کی اینجا می‌رسید][کی میرسی اینجا][کی میرسین اینجا][کی میرسید اینجا][کی فکر می‌کنی میرسی][کی فکر می‌کنی میرسین][کی فکر می‌کنی میرسید][کی فکر میکنی میرسی][کی فکر میکنی میرسین][کی فکر میکنی میرسید][تا کی میرسی][تا کی میرسین][تا کی میرسید][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][چقدر دیگه می‌رسید][فکر می‌کنی چقدر دیگه برسی][فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسی][حدوداً کی می‌رسی][حدوداً کی می‌رسین][حدوداً کی می‌رسید][کی فکر می‌کنی اینجایی][کی فکر می‌کنی اینجایین][کی فکر می‌کنی اینجایید][کی فکر میکنی اونجایی][کی فکر میکنی اونجایی][کی فکر میکنی اونجایید][چند دقیقه دیگه؟][کی؟][حدوداً؟][فکر می‌کنی چقدر دیگه برسی][[فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسید]فکر می‌کنی چند دقیقه دیگه؟][فکرمیکنی کی؟][فکر می‌کنی چند دقیقه دیگه؟][فکرمی‌کنی کی؟][فکر میکنی چند دقیقه دیگه؟][زمان تقریبی ورود؟][زمان تقریبی رسیدن؟][تقریباً؟][نزدیکی؟][چقدر دیگه؟][کی؟][اینجا؟][اونجا؟][آنجا؟][سر میدونی؟][سر میدونین؟][سر کوچه‌ای؟][سر کوچه‌این؟][پشت دری؟][پشت درین؟][حالا؟] غایب

ARRAY_LAST_N

نحو:

array_last_n(array: ARRAY, n: INT64) -> ARRAY

شرح:

آخرین n عنصر array را برمی‌گرداند.

  • اگر n منفی باشد، خطا برمی‌گرداند.

نمونه:

آرایه n array_last_n(array, n)
[1, 2, 3, 4, 5] 3 [۳، ۴، ۵]
[۱، ۲] 3 [۱، ۲]
[۱، ۲، ۳] 0 [زود می‌آیی][زود می‌آیین][زود میآیی][زود میآیین][الآن می‌آیی][الآن می‌آیین][الآن میایی][الآن میایین][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][کی می‌رسی][کی می‌رسین][کی می‌رسید][کی می‌رسی اینجا][کی می‌رسین اینجا][کی می‌رسید اینجا][کی می‌رسی آنجا][کی می‌رسین آنجا][کی می‌رسید آنجا][کی می‌رسی اونجا][کی می‌رسین اونجا][کی می‌رسید اونجا][کی اینجا می‌رسی][کی اینجا می‌رسین][کی اینجا می‌رسید][کی میرسی اینجا][کی میرسین اینجا][کی میرسید اینجا][کی فکر می‌کنی میرسی][کی فکر می‌کنی میرسین][کی فکر می‌کنی میرسید][کی فکر میکنی میرسی][کی فکر میکنی میرسین][کی فکر میکنی میرسید][تا کی میرسی][تا کی میرسین][تا کی میرسید][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][چقدر دیگه می‌رسید][فکر می‌کنی چقدر دیگه برسی][فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسی][حدوداً کی می‌رسی][حدوداً کی می‌رسین][حدوداً کی می‌رسید][کی فکر می‌کنی اینجایی][کی فکر می‌کنی اینجایین][کی فکر می‌کنی اینجایید][کی فکر میکنی اونجایی][کی فکر میکنی اونجایی][کی فکر میکنی اونجایید][چند دقیقه دیگه؟][کی؟][حدوداً؟][فکر می‌کنی چقدر دیگه برسی][[فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسید]فکر می‌کنی چند دقیقه دیگه؟][فکرمیکنی کی؟][فکر می‌کنی چند دقیقه دیگه؟][فکرمی‌کنی کی؟][فکر میکنی چند دقیقه دیگه؟][زمان تقریبی ورود؟][زمان تقریبی رسیدن؟][تقریباً؟][نزدیکی؟][چقدر دیگه؟][کی؟][اینجا؟][اونجا؟][آنجا؟][سر میدونی؟][سر میدونین؟][سر کوچه‌ای؟][سر کوچه‌این؟][پشت دری؟][پشت درین؟][حالا؟]

ARRAY_SLICE

نحو:

array_slice(array: ARRAY, offset: INT64, length: INT64) -> ARRAY

شرح:

زیرمجموعه‌ای از array را که از نمایه مبتنی بر صفر offset شروع می‌شود و شامل عناصر length است برمی‌گرداند.

  • اگر offset منفی باشد، نشان‌دهنده جایگاه شروع از انتهای آرایه است، که -1 آخرین عنصر است.
  • اگر length بزرگ‌تر از تعداد عناصر باقی‌مانده در آرایه پس‌از offset باشد، نتیجه تا انتهای آرایه گسترش می‌یابد.
  • length باید غیرمنفی باشد، درغیراین‌صورت خطا برمی‌گرداند.

نمونه:

آرایه جبران کردن طول array_slice(array, offset, length)
[1, 2, 3, 4, 5] 1 3 [۲، ۳، ۴]
[1, 2, 3, 4, 5] ۲- 2 [۴، ۵]
[۱، ۲، ۳] 1 5 [۲، ۳]
[۱، ۲، ۳] 3 2 [زود می‌آیی][زود می‌آیین][زود میآیی][زود میآیین][الآن می‌آیی][الآن می‌آیین][الآن میایی][الآن میایین][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][کی می‌رسی][کی می‌رسین][کی می‌رسید][کی می‌رسی اینجا][کی می‌رسین اینجا][کی می‌رسید اینجا][کی می‌رسی آنجا][کی می‌رسین آنجا][کی می‌رسید آنجا][کی می‌رسی اونجا][کی می‌رسین اونجا][کی می‌رسید اونجا][کی اینجا می‌رسی][کی اینجا می‌رسین][کی اینجا می‌رسید][کی میرسی اینجا][کی میرسین اینجا][کی میرسید اینجا][کی فکر می‌کنی میرسی][کی فکر می‌کنی میرسین][کی فکر می‌کنی میرسید][کی فکر میکنی میرسی][کی فکر میکنی میرسین][کی فکر میکنی میرسید][تا کی میرسی][تا کی میرسین][تا کی میرسید][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][چقدر دیگه می‌رسید][فکر می‌کنی چقدر دیگه برسی][فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسی][حدوداً کی می‌رسی][حدوداً کی می‌رسین][حدوداً کی می‌رسید][کی فکر می‌کنی اینجایی][کی فکر می‌کنی اینجایین][کی فکر می‌کنی اینجایید][کی فکر میکنی اونجایی][کی فکر میکنی اونجایی][کی فکر میکنی اونجایید][چند دقیقه دیگه؟][کی؟][حدوداً؟][فکر می‌کنی چقدر دیگه برسی][[فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسید]فکر می‌کنی چند دقیقه دیگه؟][فکرمیکنی کی؟][فکر می‌کنی چند دقیقه دیگه؟][فکرمی‌کنی کی؟][فکر میکنی چند دقیقه دیگه؟][زمان تقریبی ورود؟][زمان تقریبی رسیدن؟][تقریباً؟][نزدیکی؟][چقدر دیگه؟][کی؟][اینجا؟][اونجا؟][آنجا؟][سر میدونی؟][سر میدونین؟][سر کوچه‌ای؟][سر کوچه‌این؟][پشت دری؟][پشت درین؟][حالا؟]

ARRAY_TRANSFORM

نحو:

array_transform(array: ARRAY, expression: (ANY) -> ANY) -> ARRAY
array_transform(array: ARRAY, expression: (ANY, INT64) -> ANY) -> ARRAY

شرح:

array را با اعمال expression به هر عنصر تبدیل می‌کند و آرایه جدیدی با عناصر تبدیل‌شده برمی‌گرداند. آرایه برونداد همیشه هم‌اندازه آرایه ورودی خواهد بود.

  • expression می‌تواند تابع یکانی element -> result یا تابع دودویی (element, index) -> result باشد.
  • اگر expression تک‌مقداری باشد، با هر عنصر array فراخوانی می‌شود.
  • اگر expression دودویی باشد، با هر عنصر array و نمایه مبتنی بر صفر مربوط به آن فراخوانی می‌شود.

نمونه:

آرایه عبارت array_transform(array, expression)
[۱، ۲، ۳] x -> x * 2 [۲، ۴، ۶]
[۱، ۲، ۳] x -> x + 1 [۲، ۳، ۴]
[۱۰، ۲۰] (x, i) -> x + i [۱۰، ۲۱]
[زود می‌آیی][زود می‌آیین][زود میآیی][زود میآیین][الآن می‌آیی][الآن می‌آیین][الآن میایی][الآن میایین][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][کی می‌رسی][کی می‌رسین][کی می‌رسید][کی می‌رسی اینجا][کی می‌رسین اینجا][کی می‌رسید اینجا][کی می‌رسی آنجا][کی می‌رسین آنجا][کی می‌رسید آنجا][کی می‌رسی اونجا][کی می‌رسین اونجا][کی می‌رسید اونجا][کی اینجا می‌رسی][کی اینجا می‌رسین][کی اینجا می‌رسید][کی میرسی اینجا][کی میرسین اینجا][کی میرسید اینجا][کی فکر می‌کنی میرسی][کی فکر می‌کنی میرسین][کی فکر می‌کنی میرسید][کی فکر میکنی میرسی][کی فکر میکنی میرسین][کی فکر میکنی میرسید][تا کی میرسی][تا کی میرسین][تا کی میرسید][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][چقدر دیگه می‌رسید][فکر می‌کنی چقدر دیگه برسی][فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسی][حدوداً کی می‌رسی][حدوداً کی می‌رسین][حدوداً کی می‌رسید][کی فکر می‌کنی اینجایی][کی فکر می‌کنی اینجایین][کی فکر می‌کنی اینجایید][کی فکر میکنی اونجایی][کی فکر میکنی اونجایی][کی فکر میکنی اونجایید][چند دقیقه دیگه؟][کی؟][حدوداً؟][فکر می‌کنی چقدر دیگه برسی][[فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسید]فکر می‌کنی چند دقیقه دیگه؟][فکرمیکنی کی؟][فکر می‌کنی چند دقیقه دیگه؟][فکرمی‌کنی کی؟][فکر میکنی چند دقیقه دیگه؟][زمان تقریبی ورود؟][زمان تقریبی رسیدن؟][تقریباً؟][نزدیکی؟][چقدر دیگه؟][کی؟][اینجا؟][اونجا؟][آنجا؟][سر میدونی؟][سر میدونین؟][سر کوچه‌ای؟][سر کوچه‌این؟][پشت دری؟][پشت درین؟][حالا؟] x -> 1 [زود می‌آیی][زود می‌آیین][زود میآیی][زود میآیین][الآن می‌آیی][الآن می‌آیین][الآن میایی][الآن میایین][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][کی می‌رسی][کی می‌رسین][کی می‌رسید][کی می‌رسی اینجا][کی می‌رسین اینجا][کی می‌رسید اینجا][کی می‌رسی آنجا][کی می‌رسین آنجا][کی می‌رسید آنجا][کی می‌رسی اونجا][کی می‌رسین اونجا][کی می‌رسید اونجا][کی اینجا می‌رسی][کی اینجا می‌رسین][کی اینجا می‌رسید][کی میرسی اینجا][کی میرسین اینجا][کی میرسید اینجا][کی فکر می‌کنی میرسی][کی فکر می‌کنی میرسین][کی فکر می‌کنی میرسید][کی فکر میکنی میرسی][کی فکر میکنی میرسین][کی فکر میکنی میرسید][تا کی میرسی][تا کی میرسین][تا کی میرسید][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][چقدر دیگه می‌رسید][فکر می‌کنی چقدر دیگه برسی][فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسی][حدوداً کی می‌رسی][حدوداً کی می‌رسین][حدوداً کی می‌رسید][کی فکر می‌کنی اینجایی][کی فکر می‌کنی اینجایین][کی فکر می‌کنی اینجایید][کی فکر میکنی اونجایی][کی فکر میکنی اونجایی][کی فکر میکنی اونجایید][چند دقیقه دیگه؟][کی؟][حدوداً؟][فکر می‌کنی چقدر دیگه برسی][[فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسید]فکر می‌کنی چند دقیقه دیگه؟][فکرمیکنی کی؟][فکر می‌کنی چند دقیقه دیگه؟][فکرمی‌کنی کی؟][فکر میکنی چند دقیقه دیگه؟][زمان تقریبی ورود؟][زمان تقریبی رسیدن؟][تقریباً؟][نزدیکی؟][چقدر دیگه؟][کی؟][اینجا؟][اونجا؟][آنجا؟][سر میدونی؟][سر میدونین؟][سر کوچه‌ای؟][سر کوچه‌این؟][پشت دری؟][پشت درین؟][حالا؟]

حداکثر

نحو:

maximum(array: ARRAY) -> ANY

شرح:

بیشترین مقدار را در array برمی‌گرداند.

  • مقادیر NULL درطول مقایسه نادیده گرفته می‌شوند.
  • اگر array خالی باشد یا فقط حاوی مقادیر NULL باشد، NULL را برمی‌گرداند.

نمونه:

آرایه maximum(array)
[۱، ۵، ۲] 5
[1, null, 5] 5
["a", "c", "b"] «c»
[null, null] تهی
[زود می‌آیی][زود می‌آیین][زود میآیی][زود میآیین][الآن می‌آیی][الآن می‌آیین][الآن میایی][الآن میایین][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][کی می‌رسی][کی می‌رسین][کی می‌رسید][کی می‌رسی اینجا][کی می‌رسین اینجا][کی می‌رسید اینجا][کی می‌رسی آنجا][کی می‌رسین آنجا][کی می‌رسید آنجا][کی می‌رسی اونجا][کی می‌رسین اونجا][کی می‌رسید اونجا][کی اینجا می‌رسی][کی اینجا می‌رسین][کی اینجا می‌رسید][کی میرسی اینجا][کی میرسین اینجا][کی میرسید اینجا][کی فکر می‌کنی میرسی][کی فکر می‌کنی میرسین][کی فکر می‌کنی میرسید][کی فکر میکنی میرسی][کی فکر میکنی میرسین][کی فکر میکنی میرسید][تا کی میرسی][تا کی میرسین][تا کی میرسید][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][چقدر دیگه می‌رسید][فکر می‌کنی چقدر دیگه برسی][فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسی][حدوداً کی می‌رسی][حدوداً کی می‌رسین][حدوداً کی می‌رسید][کی فکر می‌کنی اینجایی][کی فکر می‌کنی اینجایین][کی فکر می‌کنی اینجایید][کی فکر میکنی اونجایی][کی فکر میکنی اونجایی][کی فکر میکنی اونجایید][چند دقیقه دیگه؟][کی؟][حدوداً؟][فکر می‌کنی چقدر دیگه برسی][[فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسید]فکر می‌کنی چند دقیقه دیگه؟][فکرمیکنی کی؟][فکر می‌کنی چند دقیقه دیگه؟][فکرمی‌کنی کی؟][فکر میکنی چند دقیقه دیگه؟][زمان تقریبی ورود؟][زمان تقریبی رسیدن؟][تقریباً؟][نزدیکی؟][چقدر دیگه؟][کی؟][اینجا؟][اونجا؟][آنجا؟][سر میدونی؟][سر میدونین؟][سر کوچه‌ای؟][سر کوچه‌این؟][پشت دری؟][پشت درین؟][حالا؟] تهی

MAXIMUM_N

نحو:

maximum_n(array: ARRAY, n: INT64) -> ARRAY

شرح:

آرایه‌ای از n بزرگ‌ترین مقدار در array را به‌ترتیب نزولی برمی‌گرداند.

  • مقادیر NULL نادیده گرفته می‌شوند.
  • اگر n منفی باشد، خطا برمی‌گرداند.

نمونه:

آرایه n maximum_n(array, n)
[1, 5, 2, 4, 3] 3 [۵، ۴، ۳]
[1, null, 5] 3 [۵، ۱]

حداقل

نحو:

minimum(array: ARRAY) -> ANY

شرح:

کمترین مقدار را در array برمی‌گرداند.

  • مقادیر NULL درطول مقایسه نادیده گرفته می‌شوند.
  • اگر array خالی باشد یا فقط حاوی مقادیر NULL باشد، NULL را برمی‌گرداند.

نمونه:

آرایه minimum(array)
[۱، ۵، ۲] 1
[۵، خالی، ۱] 1
["a", "c", "b"] «a»
[null, null] تهی
[زود می‌آیی][زود می‌آیین][زود میآیی][زود میآیین][الآن می‌آیی][الآن می‌آیین][الآن میایی][الآن میایین][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][کی می‌رسی][کی می‌رسین][کی می‌رسید][کی می‌رسی اینجا][کی می‌رسین اینجا][کی می‌رسید اینجا][کی می‌رسی آنجا][کی می‌رسین آنجا][کی می‌رسید آنجا][کی می‌رسی اونجا][کی می‌رسین اونجا][کی می‌رسید اونجا][کی اینجا می‌رسی][کی اینجا می‌رسین][کی اینجا می‌رسید][کی میرسی اینجا][کی میرسین اینجا][کی میرسید اینجا][کی فکر می‌کنی میرسی][کی فکر می‌کنی میرسین][کی فکر می‌کنی میرسید][کی فکر میکنی میرسی][کی فکر میکنی میرسین][کی فکر میکنی میرسید][تا کی میرسی][تا کی میرسین][تا کی میرسید][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][چقدر دیگه می‌رسید][فکر می‌کنی چقدر دیگه برسی][فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسی][حدوداً کی می‌رسی][حدوداً کی می‌رسین][حدوداً کی می‌رسید][کی فکر می‌کنی اینجایی][کی فکر می‌کنی اینجایین][کی فکر می‌کنی اینجایید][کی فکر میکنی اونجایی][کی فکر میکنی اونجایی][کی فکر میکنی اونجایید][چند دقیقه دیگه؟][کی؟][حدوداً؟][فکر می‌کنی چقدر دیگه برسی][[فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسید]فکر می‌کنی چند دقیقه دیگه؟][فکرمیکنی کی؟][فکر می‌کنی چند دقیقه دیگه؟][فکرمی‌کنی کی؟][فکر میکنی چند دقیقه دیگه؟][زمان تقریبی ورود؟][زمان تقریبی رسیدن؟][تقریباً؟][نزدیکی؟][چقدر دیگه؟][کی؟][اینجا؟][اونجا؟][آنجا؟][سر میدونی؟][سر میدونین؟][سر کوچه‌ای؟][سر کوچه‌این؟][پشت دری؟][پشت درین؟][حالا؟] تهی

MINIMUM_N

نحو:

minimum_n(array: ARRAY, n: INT64) -> ARRAY

شرح:

آرایه‌ای از n کوچک‌ترین مقدار در array را به‌ترتیب صعودی برمی‌گرداند.

  • مقادیر NULL نادیده گرفته می‌شوند.
  • اگر n منفی باشد، خطا برمی‌گرداند.

نمونه:

آرایه n minimum_n(array, n)
[1, 5, 2, 4, 3] 3 [۱، ۲، ۳]
[۵، خالی، ۱] 3 [۱، ۵]

SUM

نحو:

sum(array: ARRAY) -> INT64 | FLOAT64

شرح:

مجموع همه مقادیر NUMERIC را در ARRAY برمی‌گرداند.

  • مقادیر غیرعددی در آرایه نادیده گرفته می‌شوند.
  • اگر هر مقدار عددی در آرایه NaN باشد، تابع NaN را برمی‌گرداند.
  • نوع پاسخ با وسیع‌ترین نوع عددی در آرایه تعیین می‌شود: INT64 < FLOAT64.
  • اگر سرریز عدد صحیح ۶۴ بیتی قبل‌از جمع شدن هر مقدار نقطه شناور رخ دهد، خطایی برگردانده می‌شود. اگر مقادیر نقطه شناور جمع شوند، سرریز منجر به بی‌نهایت +/- خواهد شد.
  • اگر آرایه اصلاً حاوی مقادیر عددی نباشد، تابع NULL را برمی‌گرداند.

نمونه:

آرایه sum(array)
[۱، ۲، ۳] 6L
[1L, 2L, 3L] 6L
[2000000000, 2000000000] 4000000000L
[۱۰، ۲۰٫۵] ۳۰٫۵
[1, "a", 2] 3L
[INT64.MAX_VALUE, 1] خطا
[INT64.MAX_VALUE, 1, -1.0] خطا
[INT64.MAX_VALUE, 1.0] 9.223372036854776e+18

پیوستن

نحو:

join[T <: STRING | BYTES](array: ARRAY<T>, delimiter: T) -> STRING
join[T <: STRING | BYTES](array: ARRAY<T>, delimiter: T, null_text: T) -> STRING

شرح:

الحاق عناصر موجود در array را به‌عنوان STRING برمی‌گرداند. ‫array می‌تواند از نوع داده STRING یا BYTES باشد.

  • همه عناصر در array، delimiter، و null_text باید از یک نوع باشند؛ همه آن‌ها باید STRING یا همه آن‌ها باید BYTES باشند.
  • اگر null_text ارائه شده باشد، هر مقدار NULL در array با null_text جایگزین می‌شود.
  • اگر null_text ارائه نشده باشد، مقادیر NULL در array از نتیجه حذف می‌شود.

نمونه:

وقتی null_text ارائه نشده باشد:

آرایه جداکننده join(array, delimiter)
["a", "b", "c"] «،» "a,b,c"
["a", null, "c"] «،» "a,c"
[b'a', b'b', b'c'] b',' b'a,b,c'
["a", b'c'] «،» خطا
["a", "c"] b',' خطا
[b'a', b'c'] «،» خطا

وقتی null_text ارائه می‌شود:

آرایه جداکننده null_text join(array, delimiter, null_text)
["a", null, "c"] «،» «MISSING» «a,MISSING,c»
[b'a', null, b'c'] b',' b'NULL' b'a,NULL,c'
[null, "b", null] «،» «MISSING» «MISSING,b,MISSING»
[b'a', null, null] b',' b'NULL' b'a,NULL,NULL'
["a", null] «،» b'N' خطا
[b'a', null] b',' «N» خطا

توابع مقایسه

نام شرح
EQUAL مقایسه برابری
GREATER_THAN مقایسه بزرگ‌تر از
GREATER_THAN_OR_EQUAL مقایسه بزرگ‌تر یا مساوی
LESS_THAN مقایسه کمتر از
LESS_THAN_OR_EQUAL مقایسه کمتر یا مساوی با
NOT_EQUAL مقایسه نابرابر
CMP مقایسه کلی

مساوی

نحو:

equal(x: ANY, y: ANY) -> BOOLEAN

نمونه:

x y equal(x, y)
یک لیتر یک لیتر TRUE
‫۱٫۰ یک لیتر TRUE
‫۱٫۰- یک لیتر FALSE
غیرعددی غیرعددی TRUE
NULL NULL TRUE
NULL ABSENT FALSE

شرح:

اگر x و y برابر باشند، TRUE را برمی‌گرداند، درغیراین‌صورت FALSE را برمی‌گرداند.

Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("rating").equal(5).as("hasPerfectRating"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("rating").equal(5).as("hasPerfectRating"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("rating").equal(5).as("hasPerfectRating")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(field("rating").equal(5).alias("hasPerfectRating"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(field("rating").equal(5).alias("hasPerfectRating"))
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("rating").equal(5).as_("hasPerfectRating"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(equal(field("rating"), 5).as("hasPerfectRating"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.Equal(firestore.FieldOf("rating"), 5).As("hasPerfectRating"),
	)).
	Execute(ctx)

بزرگ‌تر از

نحو:

greater_than(x: ANY, y: ANY) -> BOOLEAN

شرح:

اگر x بزرگ‌تر از y باشد، TRUE را برمی‌گرداند، درغیراین‌صورت FALSE را برمی‌گرداند.

اگر x و y قابل‌مقایسه نباشند، FALSE را برمی‌گرداند.

نمونه:

x y greater_than(x, y)
یک لیتر ۰٫۰ TRUE
یک لیتر یک لیتر FALSE
یک لیتر 2L FALSE
«foo» ‫۰ لیتر FALSE
‫۰ لیتر «foo» FALSE
غیرعددی ‫۰ لیتر FALSE
‫۰ لیتر غیرعددی FALSE
NULL NULL FALSE
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("rating").greaterThan(4).as("hasHighRating"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("rating").greaterThan(4).as("hasHighRating"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("rating").greaterThan(4).as("hasHighRating")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(field("rating").greaterThan(4).alias("hasHighRating"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(field("rating").greaterThan(4).alias("hasHighRating"))
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("rating").greater_than(4).as_("hasHighRating"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(greaterThan(field("rating"), 4).as("hasHighRating"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.GreaterThan(firestore.FieldOf("rating"), 4).As("hasHighRating"),
	)).
	Execute(ctx)

بزرگ‌تر یا مساوی

نحو:

greater_than_or_equal(x: ANY, y: ANY) -> BOOLEAN

شرح:

اگر x بزرگ‌تر یا مساوی با y باشد، TRUE را برمی‌گرداند، درغیراین‌صورت FALSE را برمی‌گرداند.

اگر x و y قابل‌مقایسه نباشند، FALSE را برمی‌گرداند.

نمونه:

x y greater_than_or_equal(x, y)
یک لیتر ۰٫۰ TRUE
یک لیتر یک لیتر TRUE
یک لیتر 2L FALSE
«foo» ‫۰ لیتر FALSE
‫۰ لیتر «foo» FALSE
غیرعددی ‫۰ لیتر FALSE
‫۰ لیتر غیرعددی FALSE
NULL NULL TRUE
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("published").greaterThanOrEqual(1900).as("publishedIn20thCentury"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("published").greaterThanOrEqual(1900).as("publishedIn20thCentury"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("published").greaterThanOrEqual(1900).as("publishedIn20thCentury")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(field("published").greaterThanOrEqual(1900).alias("publishedIn20thCentury"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(field("published").greaterThanOrEqual(1900).alias("publishedIn20thCentury"))
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(
        Field.of("published")
        .greater_than_or_equal(1900)
        .as_("publishedIn20thCentury")
    )
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(greaterThanOrEqual(field("published"), 1900).as("publishedIn20thCentury"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.GreaterThanOrEqual(firestore.FieldOf("published"), 1900).As("publishedIn20thCentury"),
	)).
	Execute(ctx)

کمتر از

نحو:

less_than(x: ANY, y: ANY) -> BOOLEAN

شرح:

اگر x کمتر از y باشد، TRUE را برمی‌گرداند، درغیراین‌صورت FALSE را برمی‌گرداند.

اگر x و y قابل‌مقایسه نباشند، FALSE را برمی‌گرداند.

نمونه:

x y less_than(x, y)
یک لیتر ۰٫۰ FALSE
یک لیتر یک لیتر FALSE
یک لیتر 2L TRUE
«foo» ‫۰ لیتر FALSE
‫۰ لیتر «foo» FALSE
غیرعددی ‫۰ لیتر FALSE
‫۰ لیتر غیرعددی FALSE
NULL NULL FALSE
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("published").lessThan(1923).as("isPublicDomainProbably"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("published").lessThan(1923).as("isPublicDomainProbably"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("published").lessThan(1923).as("isPublicDomainProbably")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(field("published").lessThan(1923).alias("isPublicDomainProbably"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(field("published").lessThan(1923).alias("isPublicDomainProbably"))
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("published").less_than(1923).as_("isPublicDomainProbably"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(lessThan(field("published"), 1923).as("isPublicDomainProbably"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.LessThan(firestore.FieldOf("published"), 1923).As("isPublicDomainProbably"),
	)).
	Execute(ctx)

LESS_THAN_OR_EQUAL

نحو:

less_than_or_equal(x: ANY, y: ANY) -> BOOLEAN

شرح:

اگر x کمتر یا مساوی y باشد، TRUE را برمی‌گرداند، درغیراین‌صورت FALSE را برمی‌گرداند.

اگر x و y قابل‌مقایسه نباشند، FALSE را برمی‌گرداند.

نمونه:

x y less_than(x, y)
یک لیتر ۰٫۰ FALSE
یک لیتر یک لیتر TRUE
یک لیتر 2L TRUE
«foo» ‫۰ لیتر FALSE
‫۰ لیتر «foo» FALSE
غیرعددی ‫۰ لیتر FALSE
‫۰ لیتر غیرعددی FALSE
NULL NULL TRUE
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("rating").lessThanOrEqual(2).as("hasBadRating"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("rating").lessThanOrEqual(2).as("hasBadRating"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("rating").lessThanOrEqual(2).as("hasBadRating")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(field("rating").lessThanOrEqual(2).alias("hasBadRating"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(field("rating").lessThanOrEqual(2).alias("hasBadRating"))
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("rating").less_than_or_equal(2).as_("hasBadRating"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(lessThanOrEqual(field("rating"), 2).as("hasBadRating"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.LessThanOrEqual(firestore.FieldOf("rating"), 2).As("hasBadRating"),
	)).
	Execute(ctx)

NOT_EQUAL

نحو:

not_equal(x: ANY, y: ANY) -> BOOLEAN

شرح:

اگر x با y برابر نباشد، TRUE را برمی‌گرداند، درغیراین‌صورت FALSE را برمی‌گرداند.

نمونه:

x y not_equal(x, y)
یک لیتر یک لیتر FALSE
‫۱٫۰ یک لیتر FALSE
‫۱٫۰- یک لیتر TRUE
غیرعددی ‫۰ لیتر TRUE
غیرعددی غیرعددی FALSE
NULL NULL FALSE
NULL ABSENT TRUE
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("title").notEqual("1984").as("not1984"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("title").notEqual("1984").as("not1984"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("title").notEqual("1984").as("not1984")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(field("title").notEqual("1984").alias("not1984"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(field("title").notEqual("1984").alias("not1984"))
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("title").not_equal("1984").as_("not1984"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(notEqual(field("title"), "1984").as("not1984"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.NotEqual(firestore.FieldOf("title"), "1984").As("not1984"),
	)).
	Execute(ctx)

CMP

نحو:

cmp(x: ANY, y: ANY) -> Int64

شرح:

x و y را مقایسه می‌کند و این موارد را برمی‌گرداند:

  • ‫1L اگر x بزرگ‌تر از y باشد.
  • ‫-1L اگر x کمتر از y باشد.
  • درغیراین‌صورت 0L.

برخلاف دیگر توابع مقایسه، تابع cmp(...) در انواع مختلف کار می‌کند، و از همان ترتیبی پیروی می‌کند که در مرحله sort(...) استفاده می‌شود. برای اطلاع از نحوه مرتب‌سازی مقادیر در انواع مختلف، ترتیب نوع مقدار را ببینید.

نمونه:

x y cmp(x, y)
یک لیتر یک لیتر ‫۰ لیتر
‫۱٫۰ یک لیتر ‫۰ لیتر
‫۱٫۰- یک لیتر ‫-۱ لیتر
‫۴۲٫۵ روز «foo» ‫-۱ لیتر
NULL NULL ‫۰ لیتر
NULL ABSENT ‫۰ لیتر

عملکردهای اشکال‌زدایی

نام شرح
EXISTS اگر مقدار، مقدار غایب نباشد، TRUE را برمی‌گرداند
IS_ABSENT اگر مقدار از نوع مقدار غایب باشد، TRUE را برمی‌گرداند
IF_ABSENT اگر مقدار وجود نداشته باشد، آن را با عبارت جایگزین می‌کند
IS_ERROR بررسی می‌کند که آیا عبارت زیربنایی خطایی ایجاد کرده است یا نه و آن را می‌گیرد
IF_ERROR اگر مقدار خطا داده باشد، آن را با عبارت جایگزین می‌کند
ERROR ارزیابی را خاتمه می‌دهد و خطایی با پیام مشخص‌شده برمی‌گرداند

EXISTS

نحو:

exists(value: ANY) -> BOOLEAN

شرح:

اگر value مقدار غایب نباشد، TRUE را برمی‌گرداند.

نمونه:

value exists(value)
‫۰ لیتر TRUE
«foo» TRUE
NULL TRUE
ABSENT FALSE
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("rating").exists().as("hasRating"))
  .execute();

Web

مثال:

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("rating").exists().as("hasRating"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("rating").exists().as("hasRating")])
  .execute()

Kotlin

مثال:

val result = db.pipeline()
    .collection("books")
    .select(field("rating").exists().alias("hasRating"))
    .execute()

Java

مثال:

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(field("rating").exists().alias("hasRating"))
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("rating").exists().as_("hasRating"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(exists(field("rating")).as("hasRating"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.FieldExists(firestore.FieldOf("rating")).As("hasRating"),
	)).
	Execute(ctx)

IS_ABSENT

نحو:

is_absent(value: ANY) -> BOOLEAN

شرح:

اگر value مقدار غایب باشد، TRUE را برمی‌گرداند و درغیراین‌صورت FALSE را برمی‌گرداند. مقادیر غایب مقادیری هستند که در ورودی وجود ندارند، مانند فیلد سند مفقودشده.

نمونه:

value is_absent(value)
‫۰ لیتر FALSE
«foo» FALSE
NULL FALSE
ABSENT TRUE

IF_ABSENT

نحو:

if_absent(value: ANY, replacement: ANY) -> ANY

شرح:

اگر value مقدار غایب باشد، replacement را ارزیابی می‌کند و برمی‌گرداند. درغیراین‌صورت، value را برمی‌گرداند.

نمونه:

value replacement if_absent(value, replacement)
‫۵ لیتر ‫۰ لیتر ‫۵ لیتر
NULL ‫۰ لیتر NULL
ABSENT ‫۰ لیتر ‫۰ لیتر

IS_ERROR

نحو:

is_error(try: ANY) -> BOOLEAN

شرح:

اگر درطول ارزیابی try خطایی رخ دهد، TRUE را برمی‌گرداند. درغیراین‌صورت، FALSE را برمی‌گرداند.

IF_ERROR

نحو:

if_error(try: ANY, catch: ANY) -> ANY

شرح:

اگر درطول ارزیابی try خطایی رخ دهد، replacement را ارزیابی می‌کند و برمی‌گرداند. درغیراین‌صورت، مقدار حل‌شده try را برمی‌گرداند.

خطا

نحو:

error(message: STRING) -> ANY

شرح:

ارزیابی تابع error منجر به ارزیابی خط لوله برای خاتمه با خطا می‌شود. ‫message ارائه‌شده در خطا گنجانده شده است.

نمونه:

cond res switch_on(cond, res, error("no condition matched"))
TRUE یک لیتر یک لیتر
FALSE یک لیتر ERROR ("no condition matched")

عملکردهای مرجع

نوع REFERENCE به‌عنوان «اشاره‌گر» به اسناد دیگر در پایگاه داده (یا حتی پایگاه‌های داده دیگر) عمل می‌کند. توابع زیر امکان دستکاری این نوع را درطول اجرای پُرسمان فراهم می‌کنند.

نام شرح
COLLECTION_ID شناسه مجموعه برگ را در مرجع داده‌شده برمی‌گرداند
DOCUMENT_ID شناسه سند را در مرجع داده‌شده برمی‌گرداند
PARENT مرجع والد را برمی‌گرداند
REFERENCE_SLICE زیرمجموعه‌ای از بخش‌ها را از مرجع داده‌شده برمی‌گرداند

COLLECTION_ID

نحو:

collection_id(ref: REFERENCE) -> STRING

شرح:

شناسه مجموعه برگ REFERENCE داده‌شده را برمی‌گرداند.

نمونه:

ref collection_id(ref)
users/user1 "users"
users/user1/posts/post1 "posts"

DOCUMENT_ID

نحو:

document_id(ref: REFERENCE) -> ANY

شرح:

شناسه سند REFERENCE داده‌شده را برمی‌گرداند.

نمونه:

ref document_id(ref)
users/user1 "user1"
users/user1/posts/post1 "post1"

ولی

نحو:

parent(ref: REFERENCE) -> REFERENCE

شرح:

REFERENCE اصلی مرجع داده‌شده را برمی‌گرداند، یا اگر مرجع ازقبل مرجع ریشه باشد، NULL را برمی‌گرداند.

نمونه:

ref parent(ref)
/ NULL
users/user1 /
users/user1/posts/post1 users/user1

REFERENCE_SLICE

نحو:

reference_slice(ref: REFERENCE, offset: INT, length: INT) -> REFERENCE

شرح:

‫REFERENCE فهرستی از چندتایی‌های (collection_id, document_id) است و این امکان را فراهم می‌کند که نمایی از آن فهرست دریافت کنید، درست مثل array_slice(...).

REFERENCE جدیدی را برمی‌گرداند که زیرمجموعه‌ای از بخش‌های ref داده‌شده است.

  • ‫offset: نمایه شروع (مبتنی بر ۰) برش. اگر منفی باشد، یک افست از انتهای مرجع است.
  • ‫length: تعداد بخش‌هایی که باید در برش گنجانده شود.

نمونه:

ref offset length reference_slice(ref, offset, length)
a/1/b/2/c/3 یک لیتر 2L b/2/c/3
a/1/b/2/c/3 ‫۰ لیتر 2L a/1/b/2
a/1/b/2/c/3 ‫-۲ لیتر 2L c/3

توابع منطقی

نام شرح
AND «و» منطقی را اجرا می‌کند
OR «یا» منطقی را اجرا می‌کند
XOR XOR منطقی را اجرا می‌کند
NOT NOT منطقی را اجرا می‌کند
NOR NOR منطقی را اجرا می‌کند
CONDITIONAL ارزیابی را براساس عبارت شرطی منشعب می‌کند.
IF_NULL اولین مقدار غیرتهی را برمی‌گرداند
SWITCH_ON ارزیابی شاخه‌ها براساس مجموعه‌ای از شرایط
EQUAL_ANY بررسی می‌کند که آیا مقدار با هریک از عناصر آرایه برابر است یا نه
NOT_EQUAL_ANY بررسی می‌کند که آیا مقدار با هیچ‌یک از عناصر آرایه برابر نیست
MAXIMUM بیشترین مقدار را در مجموعه‌ای از مقادیر برمی‌گرداند
MINIMUM کمترین مقدار را در مجموعه‌ای از مقادیر برمی‌گرداند

و

نحو:

and(x: BOOLEAN...) -> BOOLEAN

شرح:

مقدار منطقی AND دو یا چند مقدار بولی را برمی‌گرداند.

اگر نتیجه به‌دلیل ABSENT یا NULL بودن هریک از مقادیر داده‌شده قابل‌استخراج نباشد، NULL را برمی‌گرداند.

نمونه:

x y and(x, y)
TRUE TRUE TRUE
FALSE TRUE FALSE
NULL TRUE NULL
ABSENT TRUE NULL
NULL FALSE FALSE
FALSE ABSENT FALSE
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(
    and(field("rating").greaterThan(4), field("price").lessThan(10))
      .as("under10Recommendation")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    and(field("rating").greaterThan(4), field("price").lessThan(10))
      .as("under10Recommendation")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    (Field("rating").greaterThan(4) && Field("price").lessThan(10))
      .as("under10Recommendation")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        Expression.and(field("rating").greaterThan(4),
          field("price").lessThan(10))
            .alias("under10Recommendation")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        Expression.and(
            field("rating").greaterThan(4),
            field("price").lessThan(10)
        ).alias("under10Recommendation")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field, And

result = (
    client.pipeline()
    .collection("books")
    .select(
        And(
            Field.of("rating").greater_than(4), Field.of("price").less_than(10)
        ).as_("under10Recommendation")
    )
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(
            and(greaterThan(field("rating"), 4), lessThan(field("price"), 10))
                .as("under10Recommendation"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.And(
			firestore.GreaterThan(firestore.FieldOf("rating"), 4),
			firestore.LessThan(firestore.FieldOf("price"), 10),
		).As("under10Recommendation"),
	)).
	Execute(ctx)

یا

نحو:

or(x: BOOLEAN...) -> BOOLEAN

شرح:

«یا» منطقی دو یا چند مقدار بولی را برمی‌گرداند.

اگر نتیجه به‌دلیل ABSENT یا NULL بودن هریک از مقادیر داده‌شده قابل‌استخراج نباشد، NULL را برمی‌گرداند.

نمونه:

x y or(x, y)
TRUE TRUE TRUE
FALSE TRUE TRUE
NULL TRUE TRUE
ABSENT TRUE TRUE
NULL FALSE NULL
FALSE ABSENT NULL
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(
    or(field("genre").equal("Fantasy"), field("tags").arrayContains("adventure"))
      .as("matchesSearchFilters")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    or(field("genre").equal("Fantasy"), field("tags").arrayContains("adventure"))
      .as("matchesSearchFilters")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    (Field("genre").equal("Fantasy") || Field("tags").arrayContains("adventure"))
      .as("matchesSearchFilters")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        Expression.or(field("genre").equal("Fantasy"),
          field("tags").arrayContains("adventure"))
            .alias("matchesSearchFilters")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        Expression.or(
            field("genre").equal("Fantasy"),
            field("tags").arrayContains("adventure")
        ).alias("matchesSearchFilters")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field, And, Or

result = (
    client.pipeline()
    .collection("books")
    .select(
        Or(
            Field.of("genre").equal("Fantasy"),
            Field.of("tags").array_contains("adventure"),
        ).as_("matchesSearchFilters")
    )
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(
            or(equal(field("genre"), "Fantasy"), arrayContains(field("tags"), "adventure"))
                .as("matchesSearchFilters"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.Or(
			firestore.Equal(firestore.FieldOf("genre"), "Fantasy"),
			firestore.ArrayContains(firestore.FieldOf("tags"), "adventure"),
		).As("matchesSearchFilters"),
	)).
	Execute(ctx)

XOR

نحو:

xor(x: BOOLEAN...) -> BOOLEAN

شرح:

XOR منطقی دو یا چند مقدار بولی را برمی‌گرداند.

اگر هرکدام از مقادیر داده‌شده ABSENT یا NULL باشد، NULL را برمی‌گرداند.

نمونه:

x y xor(x, y)
TRUE TRUE FALSE
FALSE FALSE FALSE
FALSE TRUE TRUE
NULL TRUE NULL
ABSENT TRUE NULL
NULL FALSE NULL
FALSE ABSENT NULL
Node.js
const result = await execute(db.pipeline()
  .collection("books")
  .select(
    xor(field("tags").arrayContains("magic"), field("tags").arrayContains("nonfiction"))
      .as("matchesSearchFilters")
  )
);

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    xor(field("tags").arrayContains("magic"), field("tags").arrayContains("nonfiction"))
      .as("matchesSearchFilters")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    (Field("tags").arrayContains("magic") ^ Field("tags").arrayContains("nonfiction"))
      .as("matchesSearchFilters")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        Expression.xor(field("tags").arrayContains("magic"),
          field("tags").arrayContains("nonfiction"))
            .alias("matchesSearchFilters")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        Expression.xor(
            field("tags").arrayContains("magic"),
            field("tags").arrayContains("nonfiction")
        ).alias("matchesSearchFilters")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field, Xor

result = (
    client.pipeline()
    .collection("books")
    .select(
        Xor(
            [
                Field.of("tags").array_contains("magic"),
                Field.of("tags").array_contains("nonfiction"),
            ]
        ).as_("matchesSearchFilters")
    )
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(
            xor(
                    arrayContains(field("tags"), "magic"),
                    arrayContains(field("tags"), "nonfiction"))
                .as("matchesSearchFilters"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.Xor(
			firestore.ArrayContains(firestore.FieldOf("tags"), "magic"),
			firestore.ArrayContains(firestore.FieldOf("tags"), "nonfiction"),
		).As("matchesSearchFilters"),
	)).
	Execute(ctx)

NOR

نحو:

nor(x: BOOLEAN...) -> BOOLEAN

شرح:

مقدار منطقی NOR دو یا چند مقدار بولی را برمی‌گرداند.

اگر نتیجه به‌دلیل ABSENT یا NULL بودن هریک از مقادیر داده‌شده قابل‌استخراج نباشد، NULL را برمی‌گرداند.

نمونه:

x y nor(x, y)
TRUE TRUE FALSE
FALSE TRUE FALSE
FALSE FALSE TRUE
NULL TRUE FALSE
ABSENT TRUE FALSE
NULL FALSE NULL
FALSE ABSENT NULL

NOT

نحو:

not(x: BOOLEAN) -> BOOLEAN

شرح:

NOT منطقی مقدار بولی را برمی‌گرداند.

Node.js
const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("tags").arrayContains("nonfiction").not()
      .as("isFiction")
  )
);

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("tags").arrayContains("nonfiction").not()
      .as("isFiction")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    (!Field("tags").arrayContains("nonfiction"))
      .as("isFiction")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        Expression.not(
            field("tags").arrayContains("nonfiction")
        ).alias("isFiction")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        Expression.not(
            field("tags").arrayContains("nonfiction")
        ).alias("isFiction")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field, Not

result = (
    client.pipeline()
    .collection("books")
    .select(Not(Field.of("tags").array_contains("nonfiction")).as_("isFiction"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(not(arrayContains(field("tags"), "nonfiction")).as("isFiction"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.Not(firestore.ArrayContains(firestore.FieldOf("tags"), "nonfiction")).As("isFiction"),
	)).
	Execute(ctx)

شرطی

نحو:

conditional(condition: BOOLEAN, true_case: ANY, false_case: ANY) -> ANY

شرح:

‫true_case را ارزیابی می‌کند و برمی‌گرداند اگر condition به TRUE ارزیابی شود.

اگر شرط به FALSE، NULL، یا مقدار ABSENT حل شود، false_case را ارزیابی می‌کند و برمی‌گرداند.

نمونه:

condition true_case false_case conditional(condition, true_case, false_case)
TRUE یک لیتر ‫۰ لیتر یک لیتر
FALSE یک لیتر ‫۰ لیتر ‫۰ لیتر
NULL یک لیتر ‫۰ لیتر ‫۰ لیتر
ABSENT یک لیتر ‫۰ لیتر ‫۰ لیتر
Node.js
const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("tags").arrayConcat([
      field("pages").greaterThan(100)
        .conditional(constant("longRead"), constant("shortRead"))
    ]).as("extendedTags")
  )
);

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("tags").arrayConcat([
      field("pages").greaterThan(100)
        .conditional(constant("longRead"), constant("shortRead"))
    ]).as("extendedTags")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("tags").arrayConcat([
      ConditionalExpression(
        Field("pages").greaterThan(100),
        then: Constant("longRead"),
        else: Constant("shortRead")
      )
    ]).as("extendedTags")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        field("tags").arrayConcat(
            Expression.conditional(
                field("pages").greaterThan(100),
                constant("longRead"),
                constant("shortRead")
            )
        ).alias("extendedTags")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("tags").arrayConcat(
            Expression.conditional(
                field("pages").greaterThan(100),
                constant("longRead"),
                constant("shortRead")
            )
        ).alias("extendedTags")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import (
    Field,
    Constant,
    Conditional,
)

result = (
    client.pipeline()
    .collection("books")
    .select(
        Field.of("tags")
        .array_concat(
            Conditional(
                Field.of("pages").greater_than(100),
                Constant.of("longRead"),
                Constant.of("shortRead"),
            )
        )
        .as_("extendedTags")
    )
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(
            arrayConcat(
                    field("tags"),
                    conditional(
                        greaterThan(field("pages"), 100),
                        constant("longRead"),
                        constant("shortRead")))
                .as("extendedTags"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.ArrayConcat(
			firestore.FieldOf("tags"),
			firestore.Conditional(
				firestore.GreaterThan(firestore.FieldOf("pages"), 100),
				firestore.ConstantOf("longRead"),
				firestore.ConstantOf("shortRead"),
			),
		).As("extendedTags"),
	)).
	Execute(ctx)

IF_NULL

نحو:

if_null(expr: ANY, replacement: ANY) -> ANY

شرح:

اگر expr برابر با NULL نباشد، آن را برمی‌گرداند، درغیراین‌صورت replacement را ارزیابی می‌کند و برمی‌گرداند. اگر از expr استفاده شود، عبارت replacement ارزیابی نمی‌شود.

نمونه:

expr replacement if_null(expr, replacement)
یک لیتر 2L یک لیتر
NULL 2L 2L
ABSENT 2L ABSENT

SWITCH_ON

نحو:

switch_on(cond1: BOOLEAN, res1: ANY, cond2: BOOLEAN, res2: ANY, ..., [default: ANY]) -> ANY

شرح:

مجموعه‌ای از شرایط را ارزیابی می‌کند و نتیجه مرتبط با اولین شرط TRUE را برمی‌گرداند. اگر هیچ شرطی به TRUE ارزیابی نشود، مقدار default درصورت ارائه برگردانده می‌شود. اگر مقدار default ارائه نشود، خطایی ایجاد می‌شود اگر هیچ شرط دیگری به TRUE ارزیابی نشود.

برای ارائه مقدار default، آن را به‌عنوان متغیر مستقل نهایی ارسال کنید تا تعداد متغیرهای مستقل فرد باشد.

نمونه:

x switch_on(eq(x, 1L), "one", eq(x, 2L), "two", "other")
یک لیتر «یک»
2L «دو»
3L «دیگر»

EQUAL_ANY

نحو:

equal_any(value: ANY, search_space: ARRAY) -> BOOLEAN

شرح:

اگر value در آرایه search_space باشد، TRUE را برمی‌گرداند.

نمونه:

value search_space equal_any(value, search_space)
‫۰ لیتر [1L, 2L, 3L] FALSE
2L [1L, 2L, 3L] TRUE
NULL [1L, 2L, 3L] FALSE
NULL [1L, NULL] TRUE
ABSENT [1L, NULL] FALSE
غیرعددی [1L, NaN, 3L] TRUE
Node.js
const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("genre").equalAny(["Science Fiction", "Psychological Thriller"])
      .as("matchesGenreFilters")
  )
);

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("genre").equalAny(["Science Fiction", "Psychological Thriller"])
      .as("matchesGenreFilters")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("genre").equalAny(["Science Fiction", "Psychological Thriller"])
      .as("matchesGenreFilters")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        field("genre").equalAny(listOf("Science Fiction", "Psychological Thriller"))
            .alias("matchesGenreFilters")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("genre").equalAny(Arrays.asList("Science Fiction", "Psychological Thriller"))
            .alias("matchesGenreFilters")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(
        Field.of("genre")
        .equal_any(["Science Fiction", "Psychological Thriller"])
        .as_("matchesGenreFilters")
    )
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(
            equalAny(field("genre"), Arrays.asList("Science Fiction", "Psychological Thriller"))
                .as("matchesGenreFilters"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.EqualAny(firestore.FieldOf("genre"), []string{"Science Fiction", "Psychological Thriller"}).As("matchesGenreFilters"),
	)).
	Execute(ctx)

NOT_EQUAL_ANY

نحو:

not_equal_any(value: ANY, search_space: ARRAY) -> BOOLEAN

شرح:

اگر value در آرایه search_space نباشد، TRUE را برمی‌گرداند.

نمونه:

value search_space not_equal_any(value, search_space)
‫۰ لیتر [1L, 2L, 3L] TRUE
2L [1L, 2L, 3L] FALSE
NULL [1L, 2L, 3L] TRUE
NULL [1L, NULL] FALSE
ABSENT [1L, NULL] TRUE
غیرعددی [1L, NaN, 3L] FALSE
Node.js
const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("author").notEqualAny(["George Orwell", "F. Scott Fitzgerald"])
      .as("byExcludedAuthors")
  )
);

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("author").notEqualAny(["George Orwell", "F. Scott Fitzgerald"])
      .as("byExcludedAuthors")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("author").notEqualAny(["George Orwell", "F. Scott Fitzgerald"])
      .as("byExcludedAuthors")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        field("author").notEqualAny(listOf("George Orwell", "F. Scott Fitzgerald"))
            .alias("byExcludedAuthors")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("author").notEqualAny(Arrays.asList("George Orwell", "F. Scott Fitzgerald"))
            .alias("byExcludedAuthors")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(
        Field.of("author")
        .not_equal_any(["George Orwell", "F. Scott Fitzgerald"])
        .as_("byExcludedAuthors")
    )
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(
            notEqualAny(field("author"), Arrays.asList("George Orwell", "F. Scott Fitzgerald"))
                .as("byExcludedAuthors"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.NotEqualAny(firestore.FieldOf("author"), []string{"George Orwell", "F. Scott Fitzgerald"}).As("byExcludedAuthors"),
	)).
	Execute(ctx)

حداکثر

نحو:

maximum(x: ANY...) -> ANY
maximum(x: ARRAY) -> ANY

شرح:

بیشترین مقدار غیرNULL و غیرABSENT را در مجموعه‌ای از مقادیر x برمی‌گرداند.

اگر هیچ مقدار غیرNULL و غیرABSENT وجود نداشته باشد، NULL برگردانده می‌شود.

اگر چند مقدار حداکثر معادل وجود داشته باشد، هرکدام از آن مقادیر می‌تواند برگردانده شود. ترتیب نوع مقدار از ترتیب مستندشده پیروی می‌کند.

نمونه:

x y maximum(x, y)
FALSE TRUE TRUE
FALSE -10L -10L
۰٫۰ -5L ۰٫۰
«foo» «bar» «foo»
«foo» ["foo"] ["foo"]
ABSENT ABSENT NULL
NULL NULL NULL
Node.js
const result = await execute(db.pipeline()
  .collection("books")
  .aggregate(field("price").maximum().as("maximumPrice"))
);

Web

const result = await execute(db.pipeline()
  .collection("books")
  .aggregate(field("price").maximum().as("maximumPrice"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("rating").logicalMaximum([1]).as("flooredRating")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        field("rating").logicalMaximum(1).alias("flooredRating")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("rating").logicalMaximum(1).alias("flooredRating")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("rating").logical_maximum(1).as_("flooredRating"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(logicalMaximum(field("rating"), 1).as("flooredRating"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.LogicalMaximum(firestore.FieldOf("rating"), 1).As("flooredRating"),
	)).
	Execute(ctx)

حداقل

نحو:

minimum(x: ANY...) -> ANY
minimum(x: ARRAY) -> ANY

شرح:

کمترین مقدار غیرNULL و غیرABSENT را در مجموعه‌ای از مقادیر x برمی‌گرداند.

اگر هیچ مقدار غیرNULL و غیرABSENT وجود نداشته باشد، NULL برگردانده می‌شود.

اگر چند مقدار معادل حداقل وجود داشته باشد، هرکدام از آن مقادیر می‌تواند برگردانده شود. ترتیب نوع مقدار از ترتیب مستندشده پیروی می‌کند.

نمونه:

x y minimum(x, y)
FALSE TRUE FALSE
FALSE -10L FALSE
۰٫۰ -5L -5L
«foo» «bar» «bar»
«foo» ["foo"] «foo»
ABSENT ABSENT NULL
NULL NULL NULL
Node.js
const result = await execute(db.pipeline()
  .collection("books")
  .aggregate(field("price").minimum().as("minimumPrice"))
);

Web

const result = await execute(db.pipeline()
  .collection("books")
  .aggregate(field("price").minimum().as("minimumPrice"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("rating").logicalMinimum([5]).as("cappedRating")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        field("rating").logicalMinimum(5).alias("cappedRating")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("rating").logicalMinimum(5).alias("cappedRating")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("rating").logical_minimum(5).as_("cappedRating"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(logicalMinimum(field("rating"), 5).as("cappedRating"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.LogicalMinimum(firestore.FieldOf("rating"), 5).As("cappedRating"),
	)).
	Execute(ctx)

عملکردهای نقشه

نام شرح
MAP مقدار نقشه را از مجموعه‌ای از جفت‌های کلید-مقدار می‌سازد
MAP_GET مقدار را در نقشه با کلید مشخص‌شده برمی‌گرداند
MAP_SET نسخه‌ای از نقشه را با مجموعه‌ای از کلیدهای به‌روزشده برمی‌گرداند
MAP_REMOVE نسخه‌ای از نقشه را با مجموعه‌ای از کلیدهای حذف‌شده برمی‌گرداند
MAP_MERGE مجموعه‌ای از نقشه‌ها را باهم ادغام می‌کند.
CURRENT_CONTEXT بافت کنونی را به‌صورت نقشه برمی‌گرداند.
MAP_KEYS آرایه‌ای از همه کلیدها را در نقشه برمی‌گرداند.
MAP_VALUES آرایه‌ای از همه مقادیر را در نقشه برمی‌گرداند.
MAP_ENTRIES آرایه‌ای از جفت‌های کلید-مقدار یک نقشه را برمی‌گرداند.

نقشه

نحو:

map(key: STRING, value: ANY, ...) -> MAP

شرح:

نقشه‌ای از مجموعه‌ای از جفت‌های کلید-مقدار می‌سازد.

MAP_GET

نحو:

map_get(map: ANY, key: STRING) -> ANY

شرح:

مقدار را در نگاشت با کلید مشخص‌شده برمی‌گرداند. اگر key در نقشه وجود نداشته باشد یا اگر آرگومان map از نوع MAP نباشد، مقدار ABSENT را برمی‌گرداند.

Node.js
const result = await db.pipeline()
  .collection("books")
  .select(
    field("awards").mapGet("pulitzer").as("hasPulitzerAward")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("awards").mapGet("pulitzer").as("hasPulitzerAward")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("awards").mapGet("pulitzer").as("hasPulitzerAward")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        field("awards").mapGet("pulitzer").alias("hasPulitzerAward")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("awards").mapGet("pulitzer").alias("hasPulitzerAward")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("awards").map_get("pulitzer").as_("hasPulitzerAward"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(mapGet(field("awards"), "pulitzer").as("hasPulitzerAward"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.MapGet(firestore.FieldOf("awards"), "pulitzer").As("hasPulitzerAward"),
	)).
	Execute(ctx)

MAP_SET

نحو:

map_set(map: MAP, key: STRING, value: ANY, ...) -> MAP

شرح:

کپی‌ای از مقدار map را برمی‌گرداند که محتوای آن با مجموعه‌ای از جفت‌های کلید-مقدار به‌روز شده است.

اگر مقدار داده‌شده به مقدار غایب تبدیل شود، کلید مرتبط از نقشه برداشته می‌شود.

اگر شناسه map MAP نباشد، مقدار غایب را برمی‌گرداند.

MAP_REMOVE

نحو:

map_remove(map: MAP, key: STRING...) -> MAP

شرح:

کپی‌ای از مقدار map را با مجموعه‌ای از کلیدهای حذف‌شده برمی‌گرداند.

MAP_MERGE

نحو:

map_merge(maps: MAP...) -> MAP

محتوای ۲ نقشه یا بیشتر را ادغام می‌کند. اگر چند نقشه مقادیر متناقض داشته باشند، از آخرین مقدار استفاده می‌شود.

CURRENT_CONTEXT

نحو:

current_context() -> MAP

نقشه‌ای متشکل از همه فیلدهای دردسترس در نقطه اجرای فعلی برمی‌گرداند.

MAP_KEYS

نحو:

map_keys(map: MAP) -> ARRAY<STRING>

شرح:

آرایه‌ای حاوی همه کلیدهای مقدار map برمی‌گرداند.

MAP_VALUES

نحو:

map_values(map: MAP) -> ARRAY<ANY>

شرح:

آرایه‌ای حاوی همه مقادیر مقدار map برمی‌گرداند.

MAP_ENTRIES

نحو:

map_entries(map: MAP) -> ARRAY<MAP>

شرح:

آرایه‌ای حاوی همه جفت‌های کلید-مقدار در مقدار map برمی‌گرداند.

هر جفت کلید-مقدار به‌صورت یک نقشه با دو ورودی k و v خواهد بود.

نمونه:

map map_entries(map)
{} [زود می‌آیی][زود می‌آیین][زود میآیی][زود میآیین][الآن می‌آیی][الآن می‌آیین][الآن میایی][الآن میایین][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][کی می‌رسی][کی می‌رسین][کی می‌رسید][کی می‌رسی اینجا][کی می‌رسین اینجا][کی می‌رسید اینجا][کی می‌رسی آنجا][کی می‌رسین آنجا][کی می‌رسید آنجا][کی می‌رسی اونجا][کی می‌رسین اونجا][کی می‌رسید اونجا][کی اینجا می‌رسی][کی اینجا می‌رسین][کی اینجا می‌رسید][کی میرسی اینجا][کی میرسین اینجا][کی میرسید اینجا][کی فکر می‌کنی میرسی][کی فکر می‌کنی میرسین][کی فکر می‌کنی میرسید][کی فکر میکنی میرسی][کی فکر میکنی میرسین][کی فکر میکنی میرسید][تا کی میرسی][تا کی میرسین][تا کی میرسید][چقدر دیگه می‌رسی][چقدر دیگه می‌رسین][چقدر دیگه می‌رسید][فکر می‌کنی چقدر دیگه برسی][فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسی][حدوداً کی می‌رسی][حدوداً کی می‌رسین][حدوداً کی می‌رسید][کی فکر می‌کنی اینجایی][کی فکر می‌کنی اینجایین][کی فکر می‌کنی اینجایید][کی فکر میکنی اونجایی][کی فکر میکنی اونجایی][کی فکر میکنی اونجایید][چند دقیقه دیگه؟][کی؟][حدوداً؟][فکر می‌کنی چقدر دیگه برسی][[فکر می‌کنی چقدر دیگه برسین][فکر می‌کنی چقدر دیگه برسید]فکر می‌کنی چند دقیقه دیگه؟][فکرمیکنی کی؟][فکر می‌کنی چند دقیقه دیگه؟][فکرمی‌کنی کی؟][فکر میکنی چند دقیقه دیگه؟][زمان تقریبی ورود؟][زمان تقریبی رسیدن؟][تقریباً؟][نزدیکی؟][چقدر دیگه؟][کی؟][اینجا؟][اونجا؟][آنجا؟][سر میدونی؟][سر میدونین؟][سر کوچه‌ای؟][سر کوچه‌این؟][پشت دری؟][پشت درین؟][حالا؟]
{"foo" : 2L} [{"k": "foo", "v" : 2L}]
{"foo" : "bar", "bar" : "foo"} [{"k": "foo", "v" : "bar" }, {"k" : "bar", "v": "foo"}]

توابع رشته

نام شرح
BYTE_LENGTH تعداد BYTES را در مقدار STRING یا BYTES برمی‌گرداند
CHAR_LENGTH تعداد نویسه‌های یونی‌کد را در مقدار STRING برمی‌گرداند
STARTS_WITH اگر STRING با پیشوند داده‌شده شروع شود، TRUE را برمی‌گرداند
ENDS_WITH اگر STRING با پسوند داده‌شده‌ای پایان یابد، TRUE را برمی‌گرداند
LIKE اگر STRING با الگویی مطابقت داشته باشد، TRUE را برمی‌گرداند
REGEX_CONTAINS اگر مقداری با عبارت باقاعده مطابقت کامل یا جزئی داشته باشد، TRUE را برمی‌گرداند
REGEX_MATCH اگر هر بخشی از مقدار با عبارت باقاعده مطابقت داشته باشد، TRUE را برمی‌گرداند
STRING_CONCAT چند STRING را در یک STRING به‌هم متصل می‌کند
STRING_CONTAINS اگر مقدار حاوی STRING باشد، TRUE را برمی‌گرداند
STRING_INDEX_OF نمایه مبتنی بر ۰ اولین رخداد مقدار STRING یا BYTES را برمی‌گرداند.
TO_UPPER مقدار STRING یا BYTES را به حروف بزرگ تبدیل می‌کند.
TO_LOWER مقدار STRING یا BYTES را به حروف کوچک تبدیل می‌کند.
SUBSTRING زیررشته‌ای از مقدار STRING یا BYTES را دریافت می‌کند.
STRING_REVERSE مقدار STRING یا BYTES را معکوس می‌کند.
STRING_REPEAT مقدار STRING یا BYTES را به‌تعداد دفعات مشخص‌شده تکرار می‌کند.
STRING_REPLACE_ALL همه رخدادهای مقدار STRING یا BYTES را جایگزین می‌کند.
STRING_REPLACE_ONE اولین رخداد مقدار STRING یا BYTES را جایگزین می‌کند.
TRIM نویسه‌های ابتدا و انتهای مقدار STRING یا BYTES را حذف می‌کند.
LTRIM نویسه‌های ابتدایی را از مقدار STRING یا BYTES حذف می‌کند.
RTRIM نویسه‌های انتهایی را از مقدار STRING یا BYTES حذف می‌کند.
SPLIT مقدار STRING یا BYTES را به آرایه تقسیم می‌کند.

BYTE_LENGTH

نحو:

byte_length[T <: STRING | BYTES](value: T) -> INT64

شرح:

تعداد BYTES را در مقدار STRING یا BYTES برمی‌گرداند.

نمونه:

مقدار byte_length(value)
«abc» 3
«xyzabc» 6
b"abc" 3
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(
    field("title").byteLength().as("titleByteLength")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("title").byteLength().as("titleByteLength")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("title").byteLength().as("titleByteLength")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        field("title").byteLength().alias("titleByteLength")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("title").byteLength().alias("titleByteLength")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("title").byte_length().as_("titleByteLength"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(byteLength(field("title")).as("titleByteLength"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.ByteLength(firestore.FieldOf("title")).As("titleByteLength"),
	)).
	Execute(ctx)

CHAR_LENGTH

نحو:

char_length(value: STRING) -> INT64

شرح:

تعداد نقاط کد یونی‌کد را در مقدار STRING برمی‌گرداند.

نمونه:

مقدار char_length(value)
«abc» 3
«سلام» 5
«جهان» 5
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(
    field("title").charLength().as("titleCharLength")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("title").charLength().as("titleCharLength")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("title").charLength().as("titleCharLength")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        field("title").charLength().alias("titleCharLength")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("title").charLength().alias("titleCharLength")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("title").char_length().as_("titleCharLength"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(charLength(field("title")).as("titleCharLength"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.CharLength(firestore.FieldOf("title")).As("titleCharLength"),
	)).
	Execute(ctx)

شروع می‌شود با

نحو:

starts_with(value: STRING, prefix: STRING) -> BOOLEAN

شرح:

اگر value با prefix شروع شود، TRUE را برمی‌گرداند.

نمونه:

مقدار پیشوند starts_with(value, prefix)
«abc» «a» درست
«abc» «b» نادرست
«abc» "" درست
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(
    field("title").startsWith("The")
      .as("needsSpecialAlphabeticalSort")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("title").startsWith("The")
      .as("needsSpecialAlphabeticalSort")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("title").startsWith("The")
      .as("needsSpecialAlphabeticalSort")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        field("title").startsWith("The")
            .alias("needsSpecialAlphabeticalSort")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("title").startsWith("The")
            .alias("needsSpecialAlphabeticalSort")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(
        Field.of("title").starts_with("The").as_("needsSpecialAlphabeticalSort")
    )
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(startsWith(field("title"), "The").as("needsSpecialAlphabeticalSort"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.StartsWith(firestore.FieldOf("title"), "The").As("needsSpecialAlphabeticalSort"),
	)).
	Execute(ctx)

ENDS_WITH

نحو:

ends_with(value: STRING, postfix: STRING) -> BOOLEAN

شرح:

اگر value با postfix پایان یابد، TRUE را برمی‌گرداند.

نمونه:

مقدار پسوند ends_with(value, postfix)
«abc» «c» درست
«abc» «b» نادرست
«abc» "" درست
Node.js
const result = await db.pipeline()
  .collection("inventory/devices/laptops")
  .select(
    field("name").endsWith("16 inch")
      .as("16InLaptops")
  )
  .execute();
Swift
let result = try await db.pipeline()
  .collection("inventory/devices/laptops")
  .select([
    Field("name").endsWith("16 inch")
      .as("16InLaptops")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("inventory/devices/laptops")
    .select(
        field("name").endsWith("16 inch")
            .alias("16InLaptops")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("inventory/devices/laptops")
    .select(
        field("name").endsWith("16 inch")
            .alias("16InLaptops")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("inventory/devices/laptops")
    .select(Field.of("name").ends_with("16 inch").as_("16InLaptops"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("inventory/devices/laptops")
        .select(endsWith(field("name"), "16 inch").as("16InLaptops"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("inventory/devices/laptops").
	Select(firestore.Fields(
		firestore.EndsWith(firestore.FieldOf("name"), "16 inch").As("`Laptops16in`"),
	)).
	Execute(ctx)

پسندیدن

نحو:

like(value: STRING, pattern: STRING) -> BOOLEAN

شرح:

اگر value با pattern مطابقت داشته باشد، TRUE را برمی‌گرداند.

نمونه:

مقدار الگو like(value, pattern)
«Firestore» «آتش%» درست
«Firestore» «%store» درست
«Datastore» «Data_tore» درست
«۱۰۰٪» «۱۰۰٪» درست
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(
    field("genre").like("%Fiction")
      .as("anyFiction")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("genre").like("%Fiction")
      .as("anyFiction")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("genre").like("%Fiction")
      .as("anyFiction")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        field("genre").like("%Fiction")
            .alias("anyFiction")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("genre").like("%Fiction")
            .alias("anyFiction")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("genre").like("%Fiction").as_("anyFiction"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(like(field("genre"), "%Fiction").as("anyFiction"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.Like(firestore.FieldOf("genre"), "%Fiction").As("anyFiction"),
	)).
	Execute(ctx)

REGEX_CONTAINS

نحو:

regex_contains(value: STRING, pattern: STRING) -> BOOLEAN

شرح:

اگر بخشی از value با pattern مطابقت داشته باشد، TRUE را برمی‌گرداند. اگر pattern عبارت باقاعده معتبری نباشد، این تابع error برمی‌گرداند.

عبارت‌های باقاعده از نحو کتابخانه re2 پیروی می‌کنند.

نمونه:

مقدار الگو regex_contains(value, pattern)
«Firestore» «آتش» درست
«Firestore» "store$" درست
«Firestore» «داده» نادرست
Node.js
const result = await db.pipeline()
  .collection("documents")
  .select(
    field("title").regexContains("Firestore (Enterprise|Standard)")
      .as("isFirestoreRelated")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("documents")
  .select(
    field("title").regexContains("Firestore (Enterprise|Standard)")
      .as("isFirestoreRelated")
  )
);
Swift
let result = try await db.pipeline()
  .collection("documents")
  .select([
    Field("title").regexContains("Firestore (Enterprise|Standard)")
      .as("isFirestoreRelated")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("documents")
    .select(
        field("title").regexContains("Firestore (Enterprise|Standard)")
            .alias("isFirestoreRelated")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("documents")
    .select(
        field("title").regexContains("Firestore (Enterprise|Standard)")
            .alias("isFirestoreRelated")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("documents")
    .select(
        Field.of("title")
        .regex_contains("Firestore (Enterprise|Standard)")
        .as_("isFirestoreRelated")
    )
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("documents")
        .select(
            regexContains(field("title"), "Firestore (Enterprise|Standard)")
                .as("isFirestoreRelated"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("documents").
	Select(firestore.Fields(
		firestore.RegexContains(firestore.FieldOf("title"), "Firestore (Enterprise|Standard)").As("isFirestoreRelated"),
	)).
	Execute(ctx)

REGEX_MATCH

نحو:

regex_match(value: STRING, pattern: STRING) -> BOOLEAN

شرح:

اگر value کاملاً با pattern مطابقت داشته باشد، TRUE را برمی‌گرداند. اگر pattern عبارت باقاعده معتبری نباشد، این تابع error برمی‌گرداند.

عبارت‌های باقاعده از نحو کتابخانه re2 پیروی می‌کنند.

نمونه:

مقدار الگو regex_match(value, pattern)
«Firestore» "F.*store" درست
«Firestore» «آتش» نادرست
«Firestore» "^F.*e$" درست
Node.js
const result = await db.pipeline()
  .collection("documents")
  .select(
    field("title").regexMatch("Firestore (Enterprise|Standard)")
      .as("isFirestoreExactly")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("documents")
  .select(
    field("title").regexMatch("Firestore (Enterprise|Standard)")
      .as("isFirestoreExactly")
  )
);
Swift
let result = try await db.pipeline()
  .collection("documents")
  .select([
    Field("title").regexMatch("Firestore (Enterprise|Standard)")
      .as("isFirestoreExactly")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("documents")
    .select(
        field("title").regexMatch("Firestore (Enterprise|Standard)")
            .alias("isFirestoreExactly")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("documents")
    .select(
        field("title").regexMatch("Firestore (Enterprise|Standard)")
            .alias("isFirestoreExactly")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("documents")
    .select(
        Field.of("title")
        .regex_match("Firestore (Enterprise|Standard)")
        .as_("isFirestoreExactly")
    )
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("documents")
        .select(
            regexMatch(field("title"), "Firestore (Enterprise|Standard)")
                .as("isFirestoreExactly"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("documents").
	Select(firestore.Fields(
		firestore.RegexMatch(firestore.FieldOf("title"), "Firestore (Enterprise|Standard)").As("isFirestoreExactly"),
	)).
	Execute(ctx)

STRING_CONCAT

نحو:

string_concat(values: STRING...) -> STRING

شرح:

دو یا چند مقدار STRING را در یک نتیجه واحد به‌هم متصل می‌کند.

نمونه:

متغیرهای مستقل string_concat(values...)
() خطا
("a") «a»
("abc", "def") «abcdef»
("a", "", "c") «ac»
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(
    field("title").stringConcat(" by ", field("author"))
      .as("fullyQualifiedTitle")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("title").stringConcat(" by ", field("author"))
      .as("fullyQualifiedTitle")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("title").concat([" by ", Field("author")])
      .as("fullyQualifiedTitle")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        field("title").concat(" by ", field("author"))
            .alias("fullyQualifiedTitle")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("title").concat(" by ", field("author"))
            .alias("fullyQualifiedTitle")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(
        Field.of("title")
        .concat(" by ", Field.of("author"))
        .as_("fullyQualifiedTitle")
    )
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(stringConcat(field("title"), " by ", field("author")).as("fullyQualifiedTitle"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.StringConcat(firestore.FieldOf("title"), " by ", firestore.FieldOf("author")).As("fullyQualifiedTitle"),
	)).
	Execute(ctx)

STRING_CONTAINS

نحو:

string_contains(value: STRING, substring: STRING) -> BOOLEAN

شرح:

بررسی می‌کند که آیا value حاوی «رشته» تحت‌اللفظی substring است یا نه.

نمونه:

مقدار رشته فرعی string_contains(value, substring)
«abc» «b» درست
«abc» «d» نادرست
«abc» "" درست
«a.c» «.» درست
«☃☃☃» «☃» درست
Node.js
const result = await db.pipeline()
  .collection("articles")
  .select(
    field("body").stringContains("Firestore")
      .as("isFirestoreRelated")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("articles")
  .select(
    field("body").stringContains("Firestore")
      .as("isFirestoreRelated")
  )
);
Swift
let result = try await db.pipeline()
  .collection("articles")
  .select([
    Field("body").stringContains("Firestore")
      .as("isFirestoreRelated")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("articles")
    .select(
        field("body").stringContains("Firestore")
            .alias("isFirestoreRelated")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("articles")
    .select(
        field("body").stringContains("Firestore")
            .alias("isFirestoreRelated")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("articles")
    .select(Field.of("body").string_contains("Firestore").as_("isFirestoreRelated"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("articles")
        .select(stringContains(field("body"), "Firestore").as("isFirestoreRelated"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("articles").
	Select(firestore.Fields(
		firestore.StringContains(firestore.FieldOf("body"), "Firestore").As("isFirestoreRelated"),
	)).
	Execute(ctx)

STRING_INDEX_OF

نحو:

string_index_of[T <: STRING | BYTES](value: T, search: T) -> INT64

شرح:

نمایه مبتنی بر ۰ اولین رخداد search را در value برمی‌گرداند.

  • اگر search پیدا نشود، -1 را برمی‌گرداند.
  • اگر value مقدار STRING باشد، نتیجه در نقاط کد یونی‌کد اندازه‌گیری می‌شود. اگر مقدار BYTES باشد، با بایت اندازه‌گیری می‌شود.
  • اگر search مقدار STRING یا BYTES خالی باشد، نتیجه 0 است.

نمونه:

مقدار جستجو string_index_of(value, search)
"hello world" «o» 4
"hello world" «l» 2
"hello world" «z» ۱-
«موز» «na» 2
«abc» "" 0
b"abc" b"b" 1
«é» «é» 0
b"é" b"é" 0

TO_UPPER

نحو:

to_upper[T <: STRING | BYTES](value: T) -> T

شرح:

مقدار STRING یا BYTES را به حروف بزرگ تبدیل می‌کند.

اگر بایت یا نویسه‌ای با نویسه الفبایی کوچک UTF-8 مطابقت نداشته باشد، بدون تغییر منتقل می‌شود.

نمونه:

مقدار to_upper(value)
«abc» «ABC»
«AbC» «ABC»
b"abc" b"ABC"
b"a1c" b"A1C"
Node.js
const result = await db.pipeline()
  .collection("authors")
  .select(
    field("name").toUpper()
      .as("uppercaseName")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("authors")
  .select(
    field("name").toUpper()
      .as("uppercaseName")
  )
);
Swift
let result = try await db.pipeline()
  .collection("authors")
  .select([
    Field("name").toUpper()
      .as("uppercaseName")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("authors")
    .select(
        field("name").toUpper()
            .alias("uppercaseName")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("authors")
    .select(
        field("name").toUpper()
            .alias("uppercaseName")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("authors")
    .select(Field.of("name").to_upper().as_("uppercaseName"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("authors")
        .select(toUpper(field("name")).as("uppercaseName"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("authors").
	Select(firestore.Fields(
		firestore.ToUpper(firestore.FieldOf("name")).As("uppercaseName"),
	)).
	Execute(ctx)

TO_LOWER

نحو:

to_lower[T <: STRING | BYTES](value: T) -> T

شرح:

مقدار STRING یا BYTES را به حروف کوچک تبدیل می‌کند.

اگر بایت یا نویسه‌ای با نویسه الفبایی بزرگ UTF-8 مطابقت نداشته باشد، بدون تغییر منتقل می‌شود.

نمونه:

مقدار to_lower(value)
«ABC» «abc»
«AbC» «abc»
«A1C» «a1c»
b"ABC" b"abc"
Node.js
const result = await db.pipeline()
  .collection("authors")
  .select(
    field("genre").toLower().equal("fantasy")
      .as("isFantasy")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("authors")
  .select(
    field("genre").toLower().equal("fantasy")
      .as("isFantasy")
  )
);
Swift
let result = try await db.pipeline()
  .collection("authors")
  .select([
    Field("genre").toLower().equal("fantasy")
      .as("isFantasy")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("authors")
    .select(
        field("genre").toLower().equal("fantasy")
            .alias("isFantasy")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("authors")
    .select(
        field("genre").toLower().equal("fantasy")
            .alias("isFantasy")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("authors")
    .select(Field.of("genre").to_lower().equal("fantasy").as_("isFantasy"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("authors")
        .select(equal(toLower(field("genre")), "fantasy").as("isFantasy"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("authors").
	Select(firestore.Fields(
		firestore.Equal(firestore.ToLower(firestore.FieldOf("genre")), "fantasy").As("isFantasy"),
	)).
	Execute(ctx)

رشته فرعی

نحو:

substring[T <: STRING | BYTES](input: T, position: INT64) -> T
substring[T <: STRING | BYTES](input: T, position: INT64, length: INT64) -> T

شرح:

زیررشته‌ای از input را که از position (نمایه صفرپایه) شروع می‌شود و حداکثر length ورودی را شامل می‌شود برمی‌گرداند. اگر هیچ length ارائه نشده باشد، رشته فرعی را از position تا انتهای input برمی‌گرداند.

  • اگر input مقدار STRING باشد، position و length در نقاط کد یونیکد اندازه‌گیری می‌شوند. اگر مقدار BYTES باشد، با بایت اندازه‌گیری می‌شود.

  • اگر position بزرگ‌تر از طول input باشد، یک رشته فرعی خالی برگردانده می‌شود. اگر position به‌علاوه length بزرگ‌تر از طول input باشد، رشته فرعی تا انتهای input کوتاه می‌شود.

  • اگر position منفی باشد، موقعیت از انتهای ورودی گرفته می‌شود. اگر position منفی از اندازه ورودی بزرگ‌تر باشد، موقعیت روی صفر تنظیم می‌شود. length باید غیرمنفی باشد.

نمونه:

وقتی length ارائه نشده باشد:

ورودی جایگاه substring(input, position)
«abc» 0 «abc»
«abc» 1 «bc»
«abc» 3 ""
«abc» ۱- «c»
b"abc" 1 b"bc"

وقتی length ارائه می‌شود:

ورودی جایگاه طول substring(input, position, length)
«abc» 0 1 «a»
«abc» 1 2 «bc»
«abc» ۱- 1 «c»
b"abc" 0 1 b"a"
Node.js
const result = await db.pipeline()
  .collection("books")
  .where(field("title").startsWith("The "))
  .select(
    field("title").substring(4)
      .as("titleWithoutLeadingThe")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .where(field("title").startsWith("The "))
  .select(
    field("title").substring(4)
      .as("titleWithoutLeadingThe")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .where(Field("title").startsWith("The "))
  .select([
    Field("title").substring(position: 4)
      .as("titleWithoutLeadingThe")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .where(field("title").startsWith("The "))
    .select(
        field("title")
          .substring(constant(4),
            field("title").charLength().subtract(4))
            .alias("titleWithoutLeadingThe")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .where(field("title").startsWith("The "))
    .select(
        field("title").substring(
          constant(4),
            field("title").charLength().subtract(4))
            .alias("titleWithoutLeadingThe")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .where(Field.of("title").starts_with("The "))
    .select(Field.of("title").substring(4).as_("titleWithoutLeadingThe"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .where(startsWith(field("title"), "The "))
        .select(
            substring(field("title"), constant(4), field("title").charLength())
                .as("titleWithoutLeadingThe"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Where(firestore.StartsWith(firestore.FieldOf("title"), "The ")).
	Select(firestore.Fields(
		firestore.Substring(firestore.FieldOf("title"), firestore.ConstantOf(4), firestore.FieldOf("title").CharLength()).As("titleWithoutLeadingThe"),
	)).
	Execute(ctx)

STRING_REVERSE

نحو:

string_reverse[T <: STRING | BYTES](input: T) -> T

شرح:

ورودی ارائه‌شده را به‌ترتیب معکوس برمی‌گرداند.

وقتی ورودی STRING باشد، نویسه‌ها با نقاط کد یونی‌کد مشخص می‌شوند و وقتی ورودی مقدار BYTES باشد، با بایت مشخص می‌شوند.

نمونه:

ورودی string_reverse(input)
«abc» «cba»
«a🌹b» "b🌹a"
«سلام» «olleh»
b"abc" b"cba"
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(
    field("name").reverse().as("reversedName")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("name").reverse().as("reversedName")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("name").reverse().as("reversedName")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        field("name").reverse().alias("reversedName")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("name").reverse().alias("reversedName")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("name").string_reverse().as_("reversedName"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(reverse(field("name")).as("reversedName"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.Reverse(firestore.FieldOf("name")).As("reversedName"),
	)).
	Execute(ctx)

STRING_REPEAT

نحو:

string_repeat[T <: STRING | BYTES](input: T, repetitions: INT64) -> T

شرح:

input را که repetitions بار تکرار شده است برمی‌گرداند.

  • ‫repetitions باید عدد صحیح غیرمنفی باشد.
  • اگر repetitions برابر با 0 باشد، مقدار خالی از همان نوع input را برمی‌گرداند.
  • اگر نتیجه از حداکثر اندازه مجاز (۱ مگابایت) فراتر برود، خطا برگردانده می‌شود.

نمونه:

ورودی تکرار string_repeat(input, repetitions)
«foo» 3 «foofoofoo»
«foo» 0 ""
"a " 3 "a a a "
b"ab" 2 b"abab"
"é🦆" 2 "é🦆é🦆"

STRING_REPLACE_ALL

نحو:

string_replace_all[T <: STRING | BYTES](input: T, find: T, replacement: T) -> T

شرح:

همه رخدادهای غیرهم‌پوشان find را در input با replacement جایگزین می‌کند.

  • مطابقت‌ها حروف‌حساس هستند.
  • اگر find خالی باشد، هیچ جایگزینی انجام نمی‌شود.

نمونه:

ورودی پیدا کردن جایگزینی string_replace_all(input, find, replacement)
"foobarfoo" «foo» «baz» «bazbarbaz»
«ababab» «aba» «c» «cbab»
«foobar» «o» "" «fbar»
«é🦆🌎🦆» «🦆» «a» "éa🌎a"
b"abc" b"b" b"d" b"adc"

STRING_REPLACE_ONE

نحو:

string_replace_one[T <: STRING | BYTES](input: T, find: T, replacement: T) -> T

شرح:

اولین رخداد find را در input با replacement جایگزین می‌کند.

  • مطابقت‌ها حروف‌حساس هستند.
  • اگر find خالی باشد، هیچ جایگزینی انجام نمی‌شود.

نمونه:

ورودی پیدا کردن جایگزینی string_replace_one(input, find, replacement)
"foobarfoo" «foo» «baz» «bazbarfoo»
«é» «é» «a» «a»
b"foobar" b"o" b"z" b"fzoobar"

برش

نحو:

trim[T <: STRING | BYTES](input: T, values_to_trim: T) -> T
trim[T <: STRING | BYTES](input: T) -> T

شرح:

مجموعه مشخصی از BYTES یا CHARS را از ابتدا و انتهای input ارائه‌شده حذف می‌کند.

  • اگر هیچ values_to_trim ارائه نشده باشد، نویسه‌های فاصله سفید را حذف می‌کند.

نمونه:

وقتی values_to_trim ارائه نشده باشد:

ورودی trim(input)
" foo " «foo»
b" foo " b"foo"
«foo» «foo»
"" ""
« » ""
"\t foo \n" «foo»
b"\t foo \n" b"foo"
"\r\f\v foo \r\f\v" «foo»
b"\r\f\v foo \r\f\v" b"foo"

وقتی values_to_trim ارائه می‌شود:

ورودی values_to_trim trim(input, values_to_trim)
«abcbfooaacb» «abc» «foo»
«abcdaabadbac» «abc» «daabad»
b"C1C2C3" b"C1" b"C2C3"
b"C1C2" «foo» خطا
«foo» b"C1" خطا

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("name").trim().as("whitespaceTrimmedName")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("name").trim(" \n\t").as("whitespaceTrimmedName")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        field("name").trim().alias("whitespaceTrimmedName")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("name").trim().alias("whitespaceTrimmedName")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("name").trim().as_("whitespaceTrimmedName"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(trim(field("name")).as("whitespaceTrimmedName"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.Trim(firestore.FieldOf("name")).As("whitespaceTrimmedName"),
	)).
	Execute(ctx)

LTRIM

نحو:

ltrim[T <: STRING | BYTES](value: T, to_trim: T) -> T
ltrim[T <: STRING | BYTES](value: T) -> T

شرح:

مجموعه مشخصی از BYTES یا CHARS را از ابتدای value ارائه‌شده می‌چیند.

  • اگر to_trim ارائه نشده باشد، نویسه‌های فاصله سفید اضافی در ابتدا را حذف می‌کند.

نمونه:

وقتی to_trim ارائه نشده باشد:

مقدار ltrim(value)
" foo " "foo "
«foo» «foo»

وقتی to_trim ارائه می‌شود:

مقدار to_trim ltrim(value, to_trim)
«aaabc» «a» «bc»
«abacaba» «ba» «caba»
«é» «é» ""

RTRIM

نحو:

rtrim[T <: STRING | BYTES](value: T, to_trim: T) -> T
rtrim[T <: STRING | BYTES](value: T) -> T

شرح:

مجموعه مشخص‌شده‌ای از BYTES یا CHARS را از انتهای value ارائه‌شده حذف می‌کند.

  • اگر to_trim ارائه نشده باشد، نویسه‌های فاصله سفید اضافی در انتهای متن را حذف می‌کند.

نمونه:

وقتی to_trim ارائه نشده باشد:

مقدار rtrim(value)
" foo " " foo"
«foo» «foo»

وقتی to_trim ارائه می‌شود:

مقدار to_trim rtrim(value, to_trim)
«abccc» «c» «ab»
«abacaba» «ba» «abac»
«é» «é» ""

تقسیم

نحو:

split(input: STRING) -> ARRAY<STRING>
split[T <: STRING | BYTES](input: T, delimiter: T) -> ARRAY<T>

شرح:

مقدار STRING یا BYTES را بااستفاده از جداکننده تقسیم می‌کند.

  • برای STRING، جداکننده پیش‌فرض ویرگول , است. جداکننده به‌عنوان یک رشته واحد درنظر گرفته می‌شود.

  • برای BYTES، باید حائل مشخص کنید.

  • تقسیم کردن روی جداکننده خالی آرایه‌ای از کدپوینت‌های «یونی‌کد» برای مقادیر STRING و آرایه‌ای از BYTES برای مقادیر BYTES تولید می‌کند.

  • تقسیم کردن STRING خالی، ARRAY با یک STRING خالی برمی‌گرداند.

نمونه:

وقتی delimiter ارائه نشده باشد:

ورودی split(input)
«foo,bar,foo» ["foo", "bar", "foo"]
«foo» ["foo"]
",foo," ["", "foo", ""]
"" [""]
b"C120C2C4" خطا

وقتی delimiter ارائه می‌شود:

ورودی جداکننده split(input, delimiter)
"foo bar foo" " " ["foo", "bar", "foo"]
"foo bar foo" «z» ["foo bar foo"]
«abc» "" ["a", "b", "c"]
b"C1,C2,C4" b"," [b"C1", b"C2", b"C4"]
b"ABC" b"" [b"A", b"B", b"C"]
«foo» b"C1" خطا

توابع مُهر زمان

نام شرح
CURRENT_TIMESTAMP TIMESTAMP مطابق با زمان درخواست را تولید می‌کند.
TIMESTAMP_TRUNC ‫TIMESTAMP را به دانه‌بندی مشخصی کوتاه می‌کند.
UNIX_MICROS_TO_TIMESTAMP تعداد میکروثانیه‌ها از 1970-01-01 00:00:00 UTC را به TIMESTAMP تبدیل می‌کند
UNIX_MILLIS_TO_TIMESTAMP تعداد میلی‌ثانیه‌ها از 1970-01-01 00:00:00 UTC را به TIMESTAMP تبدیل می‌کند
UNIX_SECONDS_TO_TIMESTAMP تعداد ثانیه‌ها از 1970-01-01 00:00:00 UTC را به TIMESTAMP تبدیل می‌کند
TIMESTAMP_ADD بازه زمانی به TIMESTAMP اضافه می‌کند
TIMESTAMP_SUB بازه زمانی را از TIMESTAMP کم می‌کند
TIMESTAMP_TO_UNIX_MICROS TIMESTAMP را به تعداد میکروثانیه‌ها از 1970-01-01 00:00:00 UTC تبدیل می‌کند
TIMESTAMP_TO_UNIX_MILLIS TIMESTAMP را به تعداد میلی‌ثانیه‌ها از 1970-01-01 00:00:00 UTC تبدیل می‌کند
TIMESTAMP_TO_UNIX_SECONDS ‫TIMESTAMP را به تعداد ثانیه‌ها از 1970-01-01 00:00:00 UTC تبدیل می‌کند
TIMESTAMP_DIFF عدد کامل فواصل unit مشخص‌شده بین دو TIMESTAMP را برمی‌گرداند.
TIMESTAMP_EXTRACT part خاصی (مثلاً سال، ماه، روز) را از TIMESTAMP استخراج می‌کند.

CURRENT_TIMESTAMP

نحو:

current_timestamp() -> TIMESTAMP

شرح:

مُهر زمان را در ابتدای زمان درخواست input دریافت می‌کند (به‌عنوان تعداد میکروثانیه‌ها از 1970-01-01 00:00:00 UTC تفسیر می‌شود).

این مقدار در یک پُرسمان ثابت است و اگر چندین بار فراخوانی شود، همیشه به همان مقدار حل می‌شود.

TIMESTAMP_TRUNC

نحو:

timestamp_trunc(timestamp: TIMESTAMP, granularity: STRING[, timezone: STRING]) -> TIMESTAMP

شرح:

مُهر زمان را تا دانه‌بندی مشخصی کوتاه می‌کند.

آرگومان granularity باید رشته و یکی از موارد زیر باشد:

  • microsecond
  • millisecond
  • second
  • minute
  • hour
  • day
  • week
  • week([weekday])
  • month
  • quarter
  • year
  • isoyear

اگر آرگومان timezone ارائه شود، کوتاه کردن براساس مرزهای تقویم منطقه زمانی ارائه‌شده انجام خواهد شد (برای مثال، کوتاه کردن روز به نیمه‌شب در منطقه زمانی ارائه‌شده کوتاه خواهد شد). این کوتاه کردن ساعت تابستانی را رعایت خواهد کرد.

اگر timezone ارائه نشود، کوتاه کردن براساس مرزهای تقویم UTC خواهد بود.

متغیر مستقل timezone باید نمایشی رشته‌ای از منطقه زمانی از پایگاه داده tz باشد، برای مثال America/New_York. با مشخص کردن یک افست از GMT، می‌توان از یک افست زمانی سفارشی نیز استفاده کرد.

نمونه:

timestamp granularity timezone timestamp_trunc(timestamp, granularity, timezone)
‫2000-01-01 10:20:30:123456 UTC «ثانیه» ارائه نشده است ‫2001-01-01 10:20:30 UTC
‫1997-05-31 04:30:30 UTC «day» ارائه نشده است ‫1997-05-31 00:00:00 UTC
‫1997-05-31 04:30:30 UTC «day» "America/Los_Angeles" ‫1997-05-30 07:00:00 UTC
‫2001-03-16 04:00:00 UTC "week(friday) ارائه نشده است ‫2001-03-16 00:00:00 UTC
‫2001-03-23 04:00:00 UTC "week(friday) "America/Los_Angeles" ‫۲۰۰۱-۰۳-۲۳ ۱۷:۰۰:۰۰ ساعت هماهنگ جهانی
‫۲۰۲۶-۰۱-۲۴ ۲۰:۰۰:۰۰ ساعت هماهنگ جهانی "month" «GMT+06:32:43» ‫2026-01-01T06:32:43 UTC

UNIX_MICROS_TO_TIMESTAMP

نحو:

unix_micros_to_timestamp(input: INT64) -> TIMESTAMP

شرح:

‫input (به‌عنوان تعداد میکروثانیه‌ها از 1970-01-01 00:00:00 UTC تفسیر می‌شود) را به TIMESTAMP تبدیل می‌کند. اگر input نتواند به TIMESTAMP معتبر تبدیل شود، error را برمی‌گرداند.

نمونه:

input unix_micros_to_timestamp(input)
‫۰ لیتر ‫۱۹۷۰-۰۱-۰۱ ۰۰:۰۰:۰۰ ساعت هماهنگ جهانی
400123456L ‫1970-01-01 00:06:40.123456 UTC
-1000000L ‫۱۹۶۹-۱۲-۳۱ ۲۳:۵۹:۵۹ ساعت هماهنگ جهانی
Node.js
const result = await db.pipeline()
  .collection("documents")
  .select(
    field("createdAtMicros").unixMicrosToTimestamp().as("createdAtString")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("documents")
  .select(
    field("createdAtMicros").unixMicrosToTimestamp().as("createdAtString")
  )
);
Swift
let result = try await db.pipeline()
  .collection("documents")
  .select([
    Field("createdAtMicros").unixMicrosToTimestamp().as("createdAtString")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("documents")
    .select(
        field("createdAtMicros").unixMicrosToTimestamp().alias("createdAtString")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("documents")
    .select(
        field("createdAtMicros").unixMicrosToTimestamp().alias("createdAtString")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("documents")
    .select(
        Field.of("createdAtMicros")
        .unix_micros_to_timestamp()
        .as_("createdAtString")
    )
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("documents")
        .select(unixMicrosToTimestamp(field("createdAtMicros")).as("createdAtString"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("documents").
	Select(firestore.Fields(
		firestore.UnixMicrosToTimestamp(firestore.FieldOf("createdAtMicros")).As("createdAtString"),
	)).
	Execute(ctx)

UNIX_MILLIS_TO_TIMESTAMP

نحو:

unix_millis_to_timestamp(input: INT64) -> TIMESTAMP

شرح:

‫input (به‌عنوان تعداد میلی‌ثانیه‌ها از 1970-01-01 00:00:00 UTC تفسیر می‌شود) را به TIMESTAMP تبدیل می‌کند. اگر input نتواند به TIMESTAMP معتبر تبدیل شود، error را برمی‌گرداند.

نمونه:

input unix_millis_to_timestamp(input)
‫۰ لیتر ‫۱۹۷۰-۰۱-۰۱ ۰۰:۰۰:۰۰ ساعت هماهنگ جهانی
4000123L ‫1970-01-01 01:06:40.123 UTC
-1000000L ‫۱۹۶۹-۱۲-۳۱ ۲۳:۴۳:۲۰ ساعت هماهنگ جهانی
Node.js
const result = await db.pipeline()
  .collection("documents")
  .select(
    field("createdAtMillis").unixMillisToTimestamp().as("createdAtString")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("documents")
  .select(
    field("createdAtMillis").unixMillisToTimestamp().as("createdAtString")
  )
);
Swift
let result = try await db.pipeline()
  .collection("documents")
  .select([
    Field("createdAtMillis").unixMillisToTimestamp().as("createdAtString")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("documents")
    .select(
        field("createdAtMillis").unixMillisToTimestamp().alias("createdAtString")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("documents")
    .select(
        field("createdAtMillis").unixMillisToTimestamp().alias("createdAtString")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("documents")
    .select(
        Field.of("createdAtMillis")
        .unix_millis_to_timestamp()
        .as_("createdAtString")
    )
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("documents")
        .select(unixMillisToTimestamp(field("createdAtMillis")).as("createdAtString"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("documents").
	Select(firestore.Fields(
		firestore.UnixMillisToTimestamp(firestore.FieldOf("createdAtMillis")).As("createdAtString"),
	)).
	Execute(ctx)

UNIX_SECONDS_TO_TIMESTAMP

نحو:

unix_seconds_to_timestamp(input: INT64) -> TIMESTAMP

شرح:

‫input (به‌عنوان تعداد ثانیه‌ها از 1970-01-01 00:00:00 UTC تفسیر می‌شود) را به TIMESTAMP تبدیل می‌کند. اگر input نتواند به TIMESTAMP معتبر تبدیل شود، error را برمی‌گرداند.

نمونه:

input unix_seconds_to_timestamp(input)
‫۰ لیتر ‫۱۹۷۰-۰۱-۰۱ ۰۰:۰۰:۰۰ ساعت هماهنگ جهانی
۶۰ لیتر ‫۱۹۷۰-۰۱-۰۱ ۰۰:۰۱:۰۰ به‌وقت ساعت هماهنگ جهانی
-300L ‫۱۹۶۹-۱۲-۳۱ ۲۳:۵۵:۰۰ ساعت هماهنگ جهانی
Node.js
const result = await db.pipeline()
  .collection("documents")
  .select(
    field("createdAtSeconds").unixSecondsToTimestamp().as("createdAtString")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("documents")
  .select(
    field("createdAtSeconds").unixSecondsToTimestamp().as("createdAtString")
  )
);
Swift
let result = try await db.pipeline()
  .collection("documents")
  .select([
    Field("createdAtSeconds").unixSecondsToTimestamp().as("createdAtString")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("documents")
    .select(
        field("createdAtSeconds").unixSecondsToTimestamp().alias("createdAtString")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("documents")
    .select(
        field("createdAtSeconds").unixSecondsToTimestamp().alias("createdAtString")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("documents")
    .select(
        Field.of("createdAtSeconds")
        .unix_seconds_to_timestamp()
        .as_("createdAtString")
    )
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("documents")
        .select(unixSecondsToTimestamp(field("createdAtSeconds")).as("createdAtString"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("documents").
	Select(firestore.Fields(
		firestore.UnixSecondsToTimestamp(firestore.FieldOf("createdAtSeconds")).As("createdAtString"),
	)).
	Execute(ctx)

TIMESTAMP_ADD

نحو:

timestamp_add(timestamp: TIMESTAMP, unit: STRING, amount: INT64) -> TIMESTAMP

شرح:

amount از unit را از timestamp اضافه می‌کند. آرگومان amount می‌تواند منفی باشد، دراین‌صورت معادل TIMESTAMP_SUB است.

آرگومان unit باید رشته و یکی از موارد زیر باشد:

  • microsecond
  • millisecond
  • second
  • minute
  • hour
  • day

اگر مُهر زمان حاصل در محدوده TIMESTAMP قرار نگیرد، خطا ایجاد می‌کند.

نمونه:

timestamp unit amount timestamp_add(timestamp, unit, amount)
‫۲۰۲۵-۰۲-۲۰ ۰۰:۰۰:۰۰ ساعت هماهنگ جهانی «دقیقه» 2L ‫۲۰۲۵-۰۲-۲۰ ۰۰:۰۲:۰۰ ساعت هماهنگ جهانی
‫۲۰۲۵-۰۲-۲۰ ۰۰:۰۰:۰۰ ساعت هماهنگ جهانی «ساعت» -4L ‫۲۰۲۵-۰۲-۱۹ ساعت ۲۰:۰۰:۰۰ به‌وقت ساعت هماهنگ جهانی
‫۲۰۲۵-۰۲-۲۰ ۰۰:۰۰:۰۰ ساعت هماهنگ جهانی «day» ‫۵ لیتر ‫۲۰۲۵-۰۲-۲۵ 00:00:00 UTC
Node.js
const result = await db.pipeline()
  .collection("documents")
  .select(
    field("createdAt").timestampAdd("day", 3653).as("expiresAt")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("documents")
  .select(
    field("createdAt").timestampAdd("day", 3653).as("expiresAt")
  )
);
Swift
let result = try await db.pipeline()
  .collection("documents")
  .select([
    Field("createdAt").timestampAdd(3653, .day).as("expiresAt")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("documents")
    .select(
        field("createdAt")
          .timestampAdd("day", 3653)
          .alias("expiresAt")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("documents")
    .select(
        field("createdAt").timestampAdd("day", 3653).alias("expiresAt")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("documents")
    .select(Field.of("createdAt").timestamp_add("day", 3653).as_("expiresAt"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("documents")
        .select(timestampAdd(field("createdAt"), "day", 3653).as("expiresAt"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("documents").
	Select(firestore.Fields(
		firestore.TimestampAdd(firestore.FieldOf("createdAt"), "day", 3653).As("expiresAt"),
	)).
	Execute(ctx)

TIMESTAMP_SUB

نحو:

timestamp_sub(timestamp: TIMESTAMP, unit: STRING, amount: INT64) -> TIMESTAMP

شرح:

amount unit را از timestamp کم می‌کند. آرگومان amount می‌تواند منفی باشد، دراین‌صورت معادل TIMESTAMP_ADD است.

آرگومان unit باید رشته و یکی از موارد زیر باشد:

  • microsecond
  • millisecond
  • second
  • minute
  • hour
  • day

اگر مُهر زمان حاصل در محدوده TIMESTAMP قرار نگیرد، خطا ایجاد می‌کند.

نمونه:

timestamp unit amount timestamp_sub(timestamp, unit, amount)
‫۲۰۲۶-۰۷-۰۴ ۰۰:۰۰:۰۰ UTC «دقیقه» ۴۰ لیتر ‫۲۰۲۶-۰۷-۰۳ ۲۳:۲۰:۰۰ ساعت هماهنگ جهانی
‫۲۰۲۶-۰۷-۰۴ ۰۰:۰۰:۰۰ UTC «ساعت» ‫-۲۴ لیتر ‫۲۰۲۶-۰۷-۰۵ ۰۰:۰۰:۰۰ UTC
‫۲۰۲۶-۰۷-۰۴ ۰۰:۰۰:۰۰ UTC «day» 3L ‫۲۰۲۶-۰۷-۰۱ ۰۰:۰۰:۰۰ UTC
Node.js
const result = await db.pipeline()
  .collection("documents")
  .select(
    field("expiresAt").timestampSubtract("day", 14).as("sendWarningTimestamp")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("documents")
  .select(
    field("expiresAt").timestampSubtract("day", 14).as("sendWarningTimestamp")
  )
);
Swift
let result = try await db.pipeline()
  .collection("documents")
  .select([
    Field("expiresAt").timestampSubtract(14, .day).as("sendWarningTimestamp")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("documents")
    .select(
        field("expiresAt")
          .timestampSubtract("day", 14)
          .alias("sendWarningTimestamp")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("documents")
    .select(
        field("expiresAt").timestampSubtract("day", 14).alias("sendWarningTimestamp")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("documents")
    .select(
        Field.of("expiresAt")
        .timestamp_subtract("day", 14)
        .as_("sendWarningTimestamp")
    )
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("documents")
        .select(timestampSubtract(field("expiresAt"), "day", 14).as("sendWarningTimestamp"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("documents").
	Select(firestore.Fields(
		firestore.TimestampSubtract(firestore.FieldOf("expiresAt"), "day", 14).As("sendWarningTimestamp"),
	)).
	Execute(ctx)

TIMESTAMP_TO_UNIX_MICROS

نحو:

timestamp_to_unix_micros(input: TIMESTAMP) -> INT64

شرح:

input را به تعداد میکروثانیه‌ها از 1970-01-01 00:00:00 UTC تبدیل می‌کند. سطوح بالاتر دقت را با گرد کردن به پایین تا ابتدای میکروثانیه کوتاه می‌کند.

نمونه:

input timestamp_to_unix_micros(input)
‫۱۹۷۰-۰۱-۰۱ ۰۰:۰۰:۰۰ ساعت هماهنگ جهانی ‫۰ لیتر
‫1970-01-01 00:06:40.123456 UTC 400123456L
‫۱۹۶۹-۱۲-۳۱ ۲۳:۵۹:۵۹ ساعت هماهنگ جهانی -1000000L
Node.js
const result = await db.pipeline()
  .collection("documents")
  .select(
    field("dateString").timestampToUnixMicros().as("unixMicros")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("documents")
  .select(
    field("dateString").timestampToUnixMicros().as("unixMicros")
  )
);
Swift
let result = try await db.pipeline()
  .collection("documents")
  .select([
    Field("dateString").timestampToUnixMicros().as("unixMicros")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("documents")
    .select(
        field("dateString").timestampToUnixMicros().alias("unixMicros")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("documents")
    .select(
        field("dateString").timestampToUnixMicros().alias("unixMicros")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("documents")
    .select(Field.of("dateString").timestamp_to_unix_micros().as_("unixMicros"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("documents")
        .select(timestampToUnixMicros(field("dateString")).as("unixMicros"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("documents").
	Select(firestore.Fields(
		firestore.TimestampToUnixMicros(firestore.FieldOf("dateString")).As("unixMicros"),
	)).
	Execute(ctx)

TIMESTAMP_TO_UNIX_MILLIS

نحو:

timestamp_to_unix_millis(input: TIMESTAMP) -> INT64

شرح:

input را به تعداد میلی‌ثانیه‌ها از 1970-01-01 00:00:00 UTC تبدیل می‌کند. سطوح بالاتر دقت را با گرد کردن به پایین تا ابتدای میلی‌ثانیه کوتاه می‌کند.

نمونه:

input timestamp_to_unix_millis(input)
‫۱۹۷۰-۰۱-۰۱ ۰۰:۰۰:۰۰ ساعت هماهنگ جهانی ‫۰ لیتر
‫1970-01-01 01:06:40.123 UTC 4000123L
1969-12-31 23:43:20 -1000000L
Node.js
const result = await db.pipeline()
  .collection("documents")
  .select(
    field("dateString").timestampToUnixMillis().as("unixMillis")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("documents")
  .select(
    field("dateString").timestampToUnixMillis().as("unixMillis")
  )
);
Swift
let result = try await db.pipeline()
  .collection("documents")
  .select([
    Field("dateString").timestampToUnixMillis().as("unixMillis")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("documents")
    .select(
        field("dateString").timestampToUnixMillis().alias("unixMillis")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("documents")
    .select(
        field("dateString").timestampToUnixMillis().alias("unixMillis")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("documents")
    .select(Field.of("dateString").timestamp_to_unix_millis().as_("unixMillis"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("documents")
        .select(timestampToUnixMillis(field("dateString")).as("unixMillis"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("documents").
	Select(firestore.Fields(
		firestore.TimestampToUnixMillis(firestore.FieldOf("dateString")).As("unixMillis"),
	)).
	Execute(ctx)

TIMESTAMP_TO_UNIX_SECONDS

نحو:

timestamp_to_unix_seconds(input: TIMESTAMP) -> INT64

شرح:

‫input را به تعداد ثانیه‌ها از 1970-01-01 00:00:00 UTC تبدیل می‌کند. با گرد کردن به پایین تا ابتدای ثانیه، سطوح بالاتر دقت را کوتاه می‌کند.

نمونه:

input timestamp_to_unix_seconds(input)
‫۱۹۷۰-۰۱-۰۱ ۰۰:۰۰:۰۰ ساعت هماهنگ جهانی ‫۰ لیتر
‫۱۹۷۰-۰۱-۰۱ ۰۰:۰۱:۰۰ به‌وقت ساعت هماهنگ جهانی ۶۰ لیتر
‫۱۹۶۹-۱۲-۳۱ ۲۳:۵۵:۰۰ ساعت هماهنگ جهانی -300L
Node.js
const result = await db.pipeline()
  .collection("documents")
  .select(
    field("dateString").timestampToUnixSeconds().as("unixSeconds")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("documents")
  .select(
    field("dateString").timestampToUnixSeconds().as("unixSeconds")
  )
);
Swift
let result = try await db.pipeline()
  .collection("documents")
  .select([
    Field("dateString").timestampToUnixSeconds().as("unixSeconds")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("documents")
    .select(
        field("dateString").timestampToUnixSeconds().alias("unixSeconds")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("documents")
    .select(
        field("dateString").timestampToUnixSeconds().alias("unixSeconds")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("documents")
    .select(Field.of("dateString").timestamp_to_unix_seconds().as_("unixSeconds"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("documents")
        .select(timestampToUnixSeconds(field("dateString")).as("unixSeconds"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("documents").
	Select(firestore.Fields(
		firestore.TimestampToUnixSeconds(firestore.FieldOf("dateString")).As("unixSeconds"),
	)).
	Execute(ctx)

TIMESTAMP_DIFF

نحو:

timestamp_diff(end: TIMESTAMP, start: TIMESTAMP, unit: STRING) -> INT64

شرح:

عدد کامل فواصل unit مشخص‌شده بین دو TIMESTAMP را برمی‌گرداند.

  • اگر end قبل‌از start باشد، مقدار منفی برمی‌گرداند.
  • هر واحد کسری را کوتاه می‌کند. برای مثال، timestamp_diff("2021-01-01 00:00:01", "2021-01-01 00:00:00", "minute") مقدار 0 را برمی‌گرداند.

آرگومان unit باید رشته و یکی از موارد زیر باشد:

  • microsecond
  • millisecond
  • second
  • minute
  • hour
  • day

نمونه:

end start unit timestamp_diff(end, start, unit)
‫۲۰۲۶-۰۷-۰۴ ۰۰:۰۱:۰۰ UTC ‫۲۰۲۶-۰۷-۰۴ ۰۰:۰۰:۰۰ UTC «ثانیه» ۶۰ لیتر
‫۲۰۲۶-۰۷-۰۴ ۰۰:۰۰:۰۰ UTC ‫۲۰۲۶-۰۷-۰۵ ۰۰:۰۰:۰۰ UTC «day» ‫-۱ لیتر
‫۲۰۲۶-۰۷-۰۴ ۰۰:۰۰:۵۹ ساعت هماهنگ جهانی ‫۲۰۲۶-۰۷-۰۴ ۰۰:۰۰:۰۰ UTC «دقیقه» ‫۰ لیتر

TIMESTAMP_EXTRACT

نحو:

timestamp_extract(timestamp: TIMESTAMP, part: STRING[, timezone: STRING]) -> INT64

شرح:

part خاصی (مثلاً سال، ماه، روز) را از timestamp استخراج می‌کند.

آرگومان part باید رشته و یکی از موارد زیر باشد:

  • microsecond
  • millisecond
  • second
  • minute
  • hour
  • day
  • dayofweek: مقداری بین ۱ (یکشنبه) و ۷ (شنبه) برمی‌گرداند.
  • dayofyear
  • week: شماره هفته سال را برمی‌گرداند، که از ۱ برای اولین یکشنبه سال شروع می‌شود.
  • week([weekday]): شماره هفته سال را با شروع از weekday مشخص‌شده برمی‌گرداند.
  • month
  • quarter
  • year
  • ‫isoweek: شماره هفته ISO 8601 را برمی‌گرداند.
  • isoyear: سال شماره‌گذاری هفته ISO 8601 را برمی‌گرداند.

اگر آرگومان timezone ارائه شود، استخراج براساس تقویم منطقه زمانی ارائه‌شده خواهد بود. استخراج از ساعت تابستانی پیروی خواهد کرد.

اگر timezone ارائه نشود، استخراج براساس UTC انجام خواهد شد.

متغیر مستقل timezone باید نمایشی رشته‌ای از منطقه زمانی از پایگاه داده منطقه زمانی باشد، برای مثال America/New_York. با مشخص کردن یک انحراف از GMT، می‌توان از یک انحراف زمانی سفارشی نیز استفاده کرد.

نمونه:

timestamp part timezone timestamp_extract(timestamp, part, timezone)
‫2025-02-20 10:20:30 UTC "year" ارائه نشده است ۲۰۲۵
‫2025-02-20 10:20:30 UTC «day» ارائه نشده است 20
‫۲۰۲۵-۱۲-۳۱ ساعت ۲۳:۵۹:۵۹ به‌وقت ساعت هماهنگ جهانی "year" «آسیا/توکیو» 2026

تایپ کردن توابع

نام شرح
TYPE نوع مقدار را به‌صورت STRING برمی‌گرداند.
IS_TYPE اگر مقدار با نوع مشخص‌شده مطابقت داشته باشد، true را برمی‌گرداند.

نوع

نحو:

type(input: ANY) -> STRING

شرح:

نمایش رشته‌ای نوع input را برمی‌گرداند.

اگر مقدار غایب داده شود، NULL را برمی‌گرداند.

نمونه:

input type(input)
NULL «null»
درست «بولی»
1 "int32"
‫-۳ لیتر «int64»
‫۳.۱۴ «float64»
‫2024-01-01T00:00:00Z UTC «مُهر زمان»
«foo» «رشته»
b"foo" «بایت»
[۱، ۲] «آرایه»
{"a": 1} «نقشه»
path("c/d") «مرجع»
vector([1.0, 2.0]) «بردار»
غایب NULL

نمونه‌های مشتری

Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("title").notEqual("1984").as("not1984"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("title").notEqual("1984").as("not1984"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("title").notEqual("1984").as("not1984")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(field("title").notEqual("1984").alias("not1984"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(field("title").notEqual("1984").alias("not1984"))
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("title").not_equal("1984").as_("not1984"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(notEqual(field("title"), "1984").as("not1984"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.NotEqual(firestore.FieldOf("title"), "1984").As("not1984"),
	)).
	Execute(ctx)

IS_TYPE

نحو:

is_type(input: ANY, type: STRING) -> BOOLEAN

شرح:

اگر input با type مشخص‌شده مطابقت داشته باشد، true را برمی‌گرداند، درغیراین‌صورت false را برمی‌گرداند. اگر input غایب باشد، NULL را برمی‌گرداند.

رشته‌های type پشتیبانی‌شده عبارت‌اند از:

  • "null"
  • "boolean"
  • "int32"
  • "int64"
  • "float64"
  • "decimal128"
  • "number"
  • "timestamp"
  • "string"
  • "bytes"
  • "array"
  • "map"
  • "reference"
  • "vector"
  • "geo_point"
  • "max_key"
  • "min_key"
  • "object_id"
  • "regex"
  • "bson_timestamp"

نمونه:

input type is_type(input, type)
NULL «null» درست
درست «بولی» درست
‫۳.۱۴ «float64» درست
«foo» «رشته» درست
b"foo" «رشته» نادرست
[۱، ۲] «آرایه» درست
{"a": 1} «نقشه» درست
vector([1.0, 2.0]) «بردار» درست
غایب «رشته» NULL
«bar» «دیگر» خطا

توابع برداری

نام شرح
COSINE_DISTANCE فاصله کسینوسی بین دو بردار را برمی‌گرداند
DOT_PRODUCT حاصل‌ضرب نقطه‌ای بین دو بردار را برمی‌گرداند
EUCLIDEAN_DISTANCE فاصله اقلیدسی بین دو بردار را برمی‌گرداند
MANHATTAN_DISTANCE فاصله منهتن بین دو بردار را برمی‌گرداند
VECTOR_LENGTH تعداد عناصر را در بردار برمی‌گرداند

COSINE_DISTANCE

نحو:

cosine_distance(x: VECTOR, y: VECTOR) -> FLOAT64

شرح:

فاصله کسینوسی بین x و y را برمی‌گرداند.

Node.js
const sampleVector = [0.0, 1, 2, 3, 4, 5];
const result = await db.pipeline()
  .collection("books")
  .select(
    field("embedding").cosineDistance(sampleVector).as("cosineDistance")
  )
  .execute();

Web

const sampleVector = [0.0, 1, 2, 3, 4, 5];
const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("embedding").cosineDistance(sampleVector).as("cosineDistance")));
Swift
let sampleVector = [0.0, 1, 2, 3, 4, 5]
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("embedding").cosineDistance(sampleVector).as("cosineDistance")
  ])
  .execute()

Kotlin

val sampleVector = doubleArrayOf(0.0, 1.0, 2.0, 3.0, 4.0, 5.0)
val result = db.pipeline()
    .collection("books")
    .select(
        field("embedding").cosineDistance(sampleVector).alias("cosineDistance")
    )
    .execute()

Java

double[] sampleVector = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0};
Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("embedding").cosineDistance(sampleVector).alias("cosineDistance")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field
from google.cloud.firestore_v1.vector import Vector

sample_vector = Vector([0.0, 1.0, 2.0, 3.0, 4.0, 5.0])
result = (
    client.pipeline()
    .collection("books")
    .select(
        Field.of("embedding").cosine_distance(sample_vector).as_("cosineDistance")
    )
    .execute()
)
جاوا
double[] sampleVector = new double[] {0.0, 1.0, 2.0, 3.0, 4.0, 5.0};
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(cosineDistance(field("embedding"), sampleVector).as("cosineDistance"))
        .execute()
        .get();
رفتن
sampleVector := []float64{0.0, 1.0, 2.0, 3.0, 4.0, 5.0}
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.CosineDistance(firestore.FieldOf("embedding"), sampleVector).As("cosineDistance"),
	)).
	Execute(ctx)

DOT_PRODUCT

نحو:

dot_product(x: VECTOR, y: VECTOR) -> FLOAT64

شرح:

ضرب داخلی x و y را برمی‌گرداند.

Node.js
const sampleVector = [0.0, 1, 2, 3, 4, 5];
const result = await db.pipeline()
  .collection("books")
  .select(
    field("embedding").dotProduct(sampleVector).as("dotProduct")
  )
  .execute();

Web

const sampleVector = [0.0, 1, 2, 3, 4, 5];
const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("embedding").dotProduct(sampleVector).as("dotProduct")
  )
);
Swift
let sampleVector = [0.0, 1, 2, 3, 4, 5]
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("embedding").dotProduct(sampleVector).as("dotProduct")
  ])
  .execute()

Kotlin

val sampleVector = doubleArrayOf(0.0, 1.0, 2.0, 3.0, 4.0, 5.0)
val result = db.pipeline()
    .collection("books")
    .select(
        field("embedding").dotProduct(sampleVector).alias("dotProduct")
    )
    .execute()

Java

double[] sampleVector = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0};
Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("embedding").dotProduct(sampleVector).alias("dotProduct")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field
from google.cloud.firestore_v1.vector import Vector

sample_vector = Vector([0.0, 1.0, 2.0, 3.0, 4.0, 5.0])
result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("embedding").dot_product(sample_vector).as_("dotProduct"))
    .execute()
)
جاوا
double[] sampleVector = new double[] {0.0, 1.0, 2.0, 3.0, 4.0, 5.0};
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(dotProduct(field("embedding"), sampleVector).as("dotProduct"))
        .execute()
        .get();
رفتن
sampleVector := []float64{0.0, 1.0, 2.0, 3.0, 4.0, 5.0}
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.DotProduct(firestore.FieldOf("embedding"), sampleVector).As("dotProduct"),
	)).
	Execute(ctx)

EUCLIDEAN_DISTANCE

نحو:

euclidean_distance(x: VECTOR, y: VECTOR) -> FLOAT64

شرح:

فاصله اقلیدسی بین x و y را محاسبه می‌کند.

Node.js
const sampleVector = [0.0, 1, 2, 3, 4, 5];
const result = await db.pipeline()
  .collection("books")
  .select(
    field("embedding").euclideanDistance(sampleVector).as("euclideanDistance")
  )
  .execute();

Web

const sampleVector = [0.0, 1, 2, 3, 4, 5];
const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("embedding").euclideanDistance(sampleVector).as("euclideanDistance")
  )
);
Swift
let sampleVector = [0.0, 1, 2, 3, 4, 5]
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("embedding").euclideanDistance(sampleVector).as("euclideanDistance")
  ])
  .execute()

Kotlin

val sampleVector = doubleArrayOf(0.0, 1.0, 2.0, 3.0, 4.0, 5.0)
val result = db.pipeline()
    .collection("books")
    .select(
        field("embedding").euclideanDistance(sampleVector).alias("euclideanDistance")
    )
    .execute()

Java

double[] sampleVector = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0};
Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("embedding").euclideanDistance(sampleVector).alias("euclideanDistance")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field
from google.cloud.firestore_v1.vector import Vector

sample_vector = Vector([0.0, 1.0, 2.0, 3.0, 4.0, 5.0])
result = (
    client.pipeline()
    .collection("books")
    .select(
        Field.of("embedding")
        .euclidean_distance(sample_vector)
        .as_("euclideanDistance")
    )
    .execute()
)
جاوا
double[] sampleVector = new double[] {0.0, 1.0, 2.0, 3.0, 4.0, 5.0};
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(euclideanDistance(field("embedding"), sampleVector).as("euclideanDistance"))
        .execute()
        .get();
رفتن
sampleVector := []float64{0.0, 1.0, 2.0, 3.0, 4.0, 5.0}
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.EuclideanDistance(firestore.FieldOf("embedding"), sampleVector).As("euclideanDistance"),
	)).
	Execute(ctx)

MANHATTAN_DISTANCE

نحو:

manhattan_distance(x: VECTOR, y: VECTOR) -> FLOAT64

شرح:

فاصله منهتن بین x و y را محاسبه می‌کند.

VECTOR_LENGTH

نحو:

vector_length(vector: VECTOR) -> INT64

شرح:

تعداد عناصر را در VECTOR برمی‌گرداند.

Node.js
const result = await db.pipeline()
  .collection("books")
  .select(
    field("embedding").vectorLength().as("vectorLength")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("embedding").vectorLength().as("vectorLength")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("embedding").vectorLength().as("vectorLength")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        field("embedding").vectorLength().alias("vectorLength")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("embedding").vectorLength().alias("vectorLength")
    )
    .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("embedding").vector_length().as_("vectorLength"))
    .execute()
)
جاوا
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(vectorLength(field("embedding")).as("vectorLength"))
        .execute()
        .get();
رفتن
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.VectorLength(firestore.FieldOf("embedding")).As("vectorLength"),
	)).
	Execute(ctx)