تجمیع
همه توابع تجمیعی میتوانند بهعنوان عبارتهای سطح بالا در مرحله
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 باید رشته و یکی از موارد زیر باشد:
microsecondmillisecondsecondminutehourdayweekweek([weekday])monthquarteryearisoyear
اگر آرگومان 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 باید رشته و یکی از موارد زیر باشد:
microsecondmillisecondsecondminutehourday
اگر مُهر زمان حاصل در محدوده 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 باید رشته و یکی از موارد زیر باشد:
microsecondmillisecondsecondminutehourday
اگر مُهر زمان حاصل در محدوده 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 باید رشته و یکی از موارد زیر باشد:
microsecondmillisecondsecondminutehourday
نمونه:
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 باید رشته و یکی از موارد زیر باشد:
microsecondmillisecondsecondminutehourdaydayofweek: مقداری بین ۱ (یکشنبه) و ۷ (شنبه) برمیگرداند.dayofyearweek: شماره هفته سال را برمیگرداند، که از ۱ برای اولین یکشنبه سال شروع میشود.week([weekday]): شماره هفته سال را با شروع ازweekdayمشخصشده برمیگرداند.monthquarteryear-
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)