تجميع
يمكن استخدام جميع دوال التجميع كتعبيرات ذات مستوى أعلى في مرحلة 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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Count # Total number of books in the collection count_all = ( client.pipeline().collection("books").aggregate(Count().as_("count")).execute() ) # Number of books with nonnull `ratings` field count_field = ( client.pipeline() .collection("books") .aggregate(Count("ratings").as_("count")) .execute() )
Java
// 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();
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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .aggregate(Field.of("rating").greater_than(4).count_if().as_("filteredCount")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .aggregate(countIf(field("rating").greaterThan(4)).as("filteredCount")) .execute() .get();
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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .aggregate(Field.of("author").count_distinct().as_("unique_authors")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .aggregate(countDistinct("author").as("unique_authors")) .execute() .get();
SUM
البنية:
sum(expression: ANY) -> NUMBER
الوصف:
لعرض مجموع جميع القيم الرقمية، مع تجاهل القيم غير الرقمية تعرض الدالة NaN إذا كانت أي من القيم NaN.
سيكون الناتج من النوع نفسه كأوسع نوع إدخال باستثناء الحالات التالية:
- سيتم تحويل
INTEGERإلىDOUBLEإذا تعذّر تمثيله كـINTEGER.
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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("cities") .aggregate(Field.of("population").sum().as_("totalPopulation")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("cities") .aggregate(sum("population").as("totalPopulation")) .execute() .get();
AVERAGE
البنية:
average(expression: ANY) -> FLOAT64
الوصف:
تعرض هذه الدالة متوسط جميع القيم الرقمية، مع تجاهل القيم غير الرقمية.
يتم تقييمها على أنّها NaN إذا كانت أي من القيم NaN، أو NULL إذا لم يتم تجميع أي قيم عددية.
سيكون الناتج من النوع نفسه مثل نوع الإدخال باستثناء الحالات التالية:
- سيتم تحويل
INTEGERإلىDOUBLEإذا تعذّر تمثيله كـINTEGER.
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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("cities") .aggregate(Field.of("population").average().as_("averagePopulation")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("cities") .aggregate(average("population").as("averagePopulation")) .execute() .get();
MINIMUM
البنية:
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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .aggregate(Field.of("price").minimum().as_("minimumPrice")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .aggregate(minimum("price").as("minimumPrice")) .execute() .get();
MAXIMUM
البنية:
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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .aggregate(Field.of("price").maximum().as_("maximumPrice")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .aggregate(maximum("price").as("maximumPrice")) .execute() .get();
FIRST
البنية:
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. - يحدث خطأ في حال حدوث تجاوز الحد الأقصى أو الأدنى.
بالإضافة إلى ذلك، عندما تأخذ دالة حسابية وسيطات رقمية متعددة من أنواع مختلفة (على سبيل المثال: add(5.0, 6))، تحوّل Cloud Firestore الوسيطات ضمنيًا إلى أوسع نوع إدخال. في حال توفير قيم INT32 فقط، سيكون نوع القيمة التي تم إرجاعها INT64.
| الاسم | الوصف |
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 |
| 10L | 10L |
| -0.0 | 0.0 |
| 10.5 | 10.5 |
| -10.5 | 10.5 |
| -231 | [error] |
| -263 | [error] |
إضافة
البنية:
add[N <: INT32 | INT64 | FLOAT64](x: N, y: N) -> N
الوصف:
تعرض هذه الدالة قيمة x + y.
أمثلة:
| x | y | add(x, y) |
|---|---|---|
| 20 | 3 | 23 |
| 10.0 | 1 | 11.0 |
| 22.5 | 2.0 | 24.5 |
| INT64.MAX | 1 | [error] |
| INT64.MIN | -1 | [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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(add(field("soldBooks"), field("unsoldBooks")).as("totalBooks")) .execute() .get();
طرح
البنية:
subtract[N <: INT32 | INT64 | FLOAT64](x: N, y: N) -> N
الوصف:
تعرض هذه الدالة قيمة x - y.
أمثلة:
| x | y | subtract(x, y) |
|---|---|---|
| 20 | 3 | 17 |
| 10.0 | 1 | 9.0 |
| 22.5 | 2.0 | 20.5 |
| INT64.MAX | -1 | [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();
Python
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() )
Java
int storeCredit = 7; Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(subtract(field("price"), storeCredit).as("totalCost")) .execute() .get();
MULTIPLY
البنية:
multiply[N <: INT32 | INT64 | FLOAT64](x: N, y: N) -> N
الوصف:
تعرض هذه الدالة قيمة x * y.
أمثلة:
| x | y | multiply(x, y) |
|---|---|---|
| 20 | 3 | 60 |
| 10.0 | 1 | 10.0 |
| 22.5 | 2.0 | 45.0 |
| 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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(multiply(field("price"), field("soldBooks")).as("revenue")) .execute() .get();
DIVIDE
البنية:
divide[N <: INT32 | INT64 | FLOAT64](x: N, y: N) -> N
الوصف:
تعرض هذه الدالة قيمة x / y. يتم اقتطاع القسمة على عدد صحيح.
أمثلة:
| x | y | divide(x, y) |
|---|---|---|
| 20 | 3 | 6 |
| 10.0 | 3 | 3.333... |
| 22.5 | 2 | 11.25 |
| 10 | 0 | [error] |
| 1.0 | 0.0 | +inf |
| -1.0 | 0.0 | -inf |
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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(divide(field("ratings"), field("soldBooks")).as("reviewRate")) .execute() .get();
تعديل
البنية:
mod[N <: INT32 | INT64 | FLOAT64](x: N, y: N) -> N
الوصف:
تعرض هذه الدالة باقي القسمة x / y.
- يتم عرض الخطأ
errorعندما تكون قيمةyصفرًا لأنواع الأعداد الصحيحة (INT64). - تعرض الدالة
NaNعندما تكونyصفرًا لأنواع الأعداد العشرية (FLOAT64).
أمثلة:
| x | y | mod(x, y) |
|---|---|---|
| 20 | 3 | 2 |
| -10 | 3 | -1 |
| 10 | -3 | 1 |
| -10 | -3 | -1 |
| 10 | 1 | 0 |
| 22.5 | 2 | 0.5 |
| 22.5 | 0.0 | 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();
Python
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() )
Java
int displayCapacity = 1000; Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(mod(field("unsoldBooks"), displayCapacity).as("warehousedBooks")) .execute() .get();
CEIL
البنية:
ceil[N <: INT32 | INT64 | FLOAT64](number: N) -> N
الوصف:
تعرِض أصغر قيمة عدد صحيح لا تقلّ عن number.
أمثلة:
| رقم | ceil(number) |
|---|---|
| 20 | 20 |
| 10 | 10 |
| 0 | 0 |
| 24L | 24L |
| -0.4 | -0.0 |
| 0.4 | 1.0 |
| 22.5 | 23.0 |
+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();
Python
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() )
Java
int booksPerShelf = 100; Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(ceil(divide(field("unsoldBooks"), booksPerShelf)).as("requiredShelves")) .execute() .get();
FLOOR
البنية:
floor[N <: INT32 | INT64 | FLOAT64](number: N) -> N
الوصف:
تعرض أكبر قيمة عدد صحيح لا تتجاوز number.
أمثلة:
| رقم | floor(number) |
|---|---|
| 20 | 20 |
| 10 | 10 |
| 0 | 0 |
| 2147483648 | 2147483648 |
| -0.4 | -1.0 |
| 0.4 | 0.0 |
| 22.5 | 22.0 |
+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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .addFields(floor(divide(field("wordCount"), field("pages"))).as("wordsPerPage")) .execute() .get();
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فقط، يتم التقريب إلى أقرب قيمة صحيحة. - يتم التقريب بعيدًا عن الصفر في حالات المنتصف.
- يتم عرض الخطأ
errorإذا أدى التقريب باستخدام قيمةplacesسالبة إلى حدوث تجاوز سعة.
أمثلة:
| رقم | أماكن | round(number, places) |
|---|---|---|
| 15.5 | 0 | 16.0 |
| -15.5 | 0 | -16.0 |
| 15 | 1 | 15 |
| 15 | 0 | 15 |
| 15 | -1 | 20 |
| 15 | -2 | 0 |
| 15.48924 | 1 | 15.5 |
| 231-1 | -1 | [error] |
| 263-1L | -1 | [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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(round(multiply(field("soldBooks"), field("price"))).as("partialRevenue")) .aggregate(sum("partialRevenue").as("totalRevenue")) .execute() .get();
TRUNC
البنية:
trunc[N <: Number](number: N) -> N
trunc[N <: Number](number: N, places: INT64) -> N
الوصف:
لاقتصاص قيمة number إلى عدد محدّد من المنازل العشرية places. يتم اقتطاع الأرقام من يمين العلامة العشرية إذا كان places موجبًا، ومن يسار العلامة العشرية إذا كان سالبًا.
- إذا تم توفير
numberفقط، يتم اقتطاع القيمة إلى أقرب قيمة صحيحة باتجاه الصفر. - يتم عرض
errorإذا أدى اقتطاع النتائج إلى تجاوز الحد الأقصى.
أمثلة:
| رقم | أماكن | trunc(number, places) |
|---|---|---|
| 15.5 | 0 | 15.0 |
| -15.5 | 0 | -15.0 |
| 15 | 1 | 15 |
| 15 | 0 | 15 |
| 15 | -1 | 10 |
| 15 | -2 | 0 |
| 15.48924 | 1 | 15.4 |
| -15.48924 | 2 | -15.48 |
POW
البنية:
pow(base: FLOAT64, exponent: FLOAT64) -> FLOAT64
الوصف:
لعرض القيمة base مرفوعة إلى الأسّ exponent.
يتم عرض خطأ إذا كانت
base <= 0وexponentسالبة.بالنسبة إلى أي
exponent، تكون قيمةpow(1, exponent)هي 1.بالنسبة إلى أي
base، تكون قيمةpow(base, 0)هي 1.
أمثلة:
| قاعدة | أساس اللوغاريتم الطبيعي | pow(base, exponent) |
|---|---|---|
| 2 | 3 | 8.0 |
| 2 | -3 | 0.125 |
+inf |
0 | 1.0 |
| 1 | +inf |
1.0 |
| -1 | 0.5 | [error] |
| 0 | -1 | [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();
Python
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() )
Java
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();
SQRT
البنية:
sqrt[N <: FLOAT64 | DECIMAL128](number: N) -> N
الوصف:
تعرض هذه الدالة الجذر التربيعي لعدد number.
- يتم عرض الخطأ
errorإذا كانت قيمةnumberسالبة.
أمثلة:
| رقم | sqrt(number) |
|---|---|
| 25 | 5.0 |
| 12.002 | 3.464... |
| 0.0 | 0.0 |
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();
Python
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() )
Java
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();
EXP
البنية:
exp(exponent: FLOAT64) -> FLOAT64
الوصف:
تعرض هذه الدالة قيمة عدد أويلر مرفوعًا إلى الأس exponent، ويُطلق عليها أيضًا اسم الدالة الأسية الطبيعية.
أمثلة:
| أساس اللوغاريتم الطبيعي | exp(exponent) |
|---|---|
| 0.0 | 1.0 |
| 10 | e^10 (FLOAT64) |
+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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .select(Field.of("rating").exp().as_("expRating")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(exp(field("rating")).as("expRating")) .execute() .get();
LN
البنية:
ln(number: FLOAT64) -> FLOAT64
الوصف:
تعرض هذه الدالة اللوغاريتم الطبيعي للعدد number. هذه الدالة مكافئة للدالة log(number).
أمثلة:
| رقم | ln(number) |
|---|---|
| 1 | 0.0 |
| 2L | 0.693... |
| 1.0 | 0.0 |
e (FLOAT64) |
1.0 |
-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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .select(Field.of("rating").ln().as_("lnRating")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(ln(field("rating")).as("lnRating")) .execute() .get();
LOG
البنية:
log(number: FLOAT64, base: FLOAT64) -> FLOAT64
log(number: FLOAT64) -> FLOAT64
الوصف:
لعرض لوغاريتم number إلى base.
- إذا تم توفير
numberفقط، تعرض الدالة اللوغاريتم الأساسي لـnumberإلىbase(وهو مرادف لـln(number)).
أمثلة:
| رقم | قاعدة | log(number, base) |
|---|---|---|
| 100 | 10 | 2.0 |
-inf |
Numeric |
NaN |
Numeric. |
+inf |
NaN |
number <= 0 |
Numeric |
[error] |
Numeric |
base <= 0 |
[error] |
Numeric |
1.0 | [error] |
LOG10
البنية:
log10(x: FLOAT64) -> FLOAT64
الوصف:
تعرض هذه الدالة لوغاريتم العدد number للأساس 10.
أمثلة:
| رقم | log10(number) |
|---|---|
| 100 | 2.0 |
-inf |
NaN |
+inf |
+inf |
x <= 0 |
[error] |
RAND
البنية:
rand() -> FLOAT64
الوصف:
عرض رقم نقطة عائمة عشوائي زائف، يتم اختياره بشكل منتظم بين 0.0 (شامل) و1.0 (غير شامل).
دوال المصفوفات
| الاسم | الوصف |
ARRAY
|
تعرض هذه الدالة ARRAY تحتوي على عنصر واحد لكل وسيط إدخال.
|
ARRAY_CONCAT
|
لربط عدة مصفوفات في مصفوفة واحدة ARRAY
|
ARRAY_CONTAINS
|
تعرض الدالة TRUE إذا كانت ARRAY المحدّدة تحتوي على قيمة معيّنة
|
ARRAY_CONTAINS_ALL
|
تعرض TRUE إذا كانت جميع القيم متوفرة في ARRAY
|
ARRAY_CONTAINS_ANY
|
تعرض الدالة TRUE إذا كانت أي من القيم متوفرة في ARRAY
|
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
البنية:
array(values: ANY...) -> ARRAY
الوصف:
تنشئ هذه الدالة صفيفًا من العناصر المحدّدة.
- إذا لم تكن وسيطة متوفّرة، يتم استبدالها بـ
NULLفي المصفوفة الناتجة.
أمثلة:
| values | array(values) |
|---|---|
| () | [] |
| (1, 2, 3) | [1, 2, 3] |
| ("a", 1, true) | ["a", 1, true] |
| (1, null) | [1, null] |
| (1, [2, 3]) | [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, 3] |
| ([], [1, 2]) | [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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(arrayConcat(field("genre"), field("subGenre")).as("allGenres")) .execute() .get();
ARRAY_CONTAINS
البنية:
array_contains(array: ARRAY, value: ANY) -> BOOLEAN
الوصف:
تعرض الدالة TRUE إذا تم العثور على value في array، وتعرض FALSE بخلاف ذلك.
أمثلة:
| مصفوفة | القيمة | array_contains(array, value) |
|---|---|---|
| [1, 2, 3] | 2 | صحيح |
| [[1, 2], [3]] | [1, 2] | صحيح |
| [1, null] | قيمة فارغة | صحيح |
| "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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .select(Field.of("genre").array_contains("mystery").as_("isMystery")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(arrayContains(field("genre"), "mystery").as("isMystery")) .execute() .get();
ARRAY_CONTAINS_ALL
البنية:
array_contains_all(array: ARRAY, search_values: ARRAY) -> BOOLEAN
الوصف:
تعرض الدالة TRUE إذا تم العثور على جميع قيم search_values في array، وتعرض FALSE بخلاف ذلك.
أمثلة:
| مصفوفة | قيم_البحث | array_contains_all(array, search_values) |
|---|---|---|
| [1, 2, 3] | [1, 2] | صحيح |
| [1, 2, 3] | [1, 4] | خطأ |
| [1, null] | [فارغ] | صحيح |
| [NaN] | [NaN] | صحيح |
| [] | [] | صحيح |
| [1, 2, 3] | [] | صحيح |
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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select( arrayContainsAll(field("genre"), Arrays.asList("fantasy", "adventure")) .as("isFantasyAdventure")) .execute() .get();
ARRAY_CONTAINS_ANY
البنية:
array_contains_any(array: ARRAY, search_values: ARRAY) -> BOOLEAN
الوصف:
تعرِض الدالة TRUE إذا تم العثور على أي من search_values في array، وتعرض FALSE بخلاف ذلك.
أمثلة:
| مصفوفة | قيم_البحث | array_contains_any(array, search_values) |
|---|---|---|
| [1, 2, 3] | [4, 1] | صحيح |
| [1, 2, 3] | [4, 5] | خطأ |
| [1, 2, 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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select( arrayContainsAny(field("genre"), Arrays.asList("fantasy", "nonfiction")) .as("isMysteryOrFantasy")) .execute() .get();
ARRAY_FILTER
البنية:
array_filter(array: ARRAY, predicate: (ANY) -> BOOLEAN) -> ARRAY
الوصف:
تُجري عملية الفلترة array باستخدام تعبير predicate، وتعرض مصفوفة جديدة تحتوي على العناصر التي تستوفي الشرط فقط.
- يتم تقييم
predicateلكل عنصر فيarray. إذا عرضت الدالة القيمةtrue، يتم تضمين العنصر في النتيجة، وإلا (إذا عرضت القيمةfalseأوnull)، يتم إغفاله. - إذا تم تقييم
predicateإلى قيمة غير منطقية أو غير فارغة، تعرض الدالة خطأ.
أمثلة:
| مصفوفة | محمول | array_filter(array, predicate) |
|---|---|---|
| [1, 2, 3] | x -> x > 1 | [2, 3] |
| [1, null, 3] | x -> x > 1 | [3] |
| ["a", "b", "c"] | x -> x != "b" | ["a", "c"] |
| [] | x -> true | [] |
ARRAY_GET
البنية:
array_get(array: ARRAY, index: INT64) -> ANY
الوصف:
تعرض هذه الدالة العنصر في الموضع index المستند إلى الرقم 0 في array.
- إذا كانت قيمة
indexسالبة، يتم الوصول إلى العناصر من نهاية المصفوفة، حيث يكون-1هو العنصر الأخير. - إذا لم يكن
arrayمن النوعARRAYولم يكنnull، يتم عرض رسالة خطأ. - إذا كان
indexخارج الحدود، تعرض الدالة قيمة غير متوفّرة. - إذا لم يكن
indexمن النوعINT64، ستعرض الدالة خطأ.
أمثلة:
| مصفوفة | الفهرس | array_get(array, index) |
|---|---|---|
| [1, 2, 3] | 0 | 1 |
| [1, 2, 3] | -1 | 3 |
| [1, 2, 3] | 3 | غياب |
| [1, 2, 3] | -4 | غياب |
| "abc" | 0 | خطأ |
| قيمة فارغة | 0 | قيمة فارغة |
Array |
"a" | خطأ |
Array |
2.0 | خطأ |
ARRAY_LENGTH
البنية:
array_length(array: ARRAY) -> INT64
الوصف:
تعرِض هذه الدالة عدد العناصر في array.
أمثلة:
| مصفوفة | array_length(array) |
|---|---|
| [1, 2, 3] | 3 |
| [] | 0 |
| [1, 1, 1] | 3 |
| [1, null] | 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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .select(Field.of("genre").array_length().as_("genreCount")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(arrayLength(field("genre")).as("genreCount")) .execute() .get();
ARRAY_REVERSE
البنية:
array_reverse(array: ARRAY) -> ARRAY
الوصف:
تعكس هذه الدالة array المحدّدة.
أمثلة:
| مصفوفة | array_reverse(array) |
|---|---|
| [1, 2, 3] | [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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .select(Field.of("genre").array_reverse().as_("reversedGenres")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(arrayReverse(field("genre")).as("reversedGenres")) .execute() .get();
ARRAY_FIRST
البنية:
array_first(array: ARRAY) -> ANY
الوصف:
تعرِض هذه الدالة العنصر الأول في array. هذا الإعداد مكافئ للإعداد array_get(array, 0).
- إذا كانت
arrayفارغة، يتم عرض قيمة غير متوفّرة.
أمثلة:
| مصفوفة | array_first(array) |
|---|---|
| [1, 2, 3] | 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 | [1, 2, 3] |
| [1, 2] | 3 | [1, 2] |
| [1, 2, 3] | 0 | [] |
ARRAY_INDEX_OF
البنية:
array_index_of(array: ARRAY, value: ANY) -> INT64
الوصف:
تعرِض هذه الدالة الفهرس المستند إلى الرقم 0 لأول ظهور لـ value في array. تعرِض الدالة القيمة -1 في حال عدم العثور على value.
أمثلة:
| مصفوفة | القيمة | array_index_of(array, value) |
|---|---|---|
| [1, 2, 3, 2] | 2 | 1 |
| [1, 2, 3] | 4 | -1 |
| [1, null, 3] | قيمة فارغة | 1 |
ARRAY_INDEX_OF_ALL
البنية:
array_index_of_all(array: ARRAY, value: ANY) -> ARRAY<INT64>
الوصف:
تعرض هذه الدالة مصفوفة تحتوي على الفهارس المستندة إلى 0 لجميع مرات ظهور value في array. تعرض الدالة القيمة [] إذا لم يتم العثور على value.
أمثلة:
| مصفوفة | القيمة | array_index_of_all(array, value) |
|---|---|---|
| [1, 2, 3, 2] | 2 | [1, 3] |
| [1, 2, 3] | 4 | [] |
| [1, null, 3, null] | قيمة فارغة | [1, 3] |
ARRAY_LAST
البنية:
array_last(array: ARRAY) -> ANY
الوصف:
تعرض هذه الدالة العنصر الأخير في array. هذا الإعداد مكافئ للإعداد array_get(array, -1).
- إذا كانت
arrayفارغة، يتم عرض قيمة غير متوفّرة.
أمثلة:
| مصفوفة | array_last(array) |
|---|---|
| [1, 2, 3] | 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, 4, 5] |
| [1, 2] | 3 | [1, 2] |
| [1, 2, 3] | 0 | [] |
ARRAY_SLICE
البنية:
array_slice(array: ARRAY, offset: INT64, length: INT64) -> ARRAY
الوصف:
تعرض هذه الدالة مجموعة فرعية من array تبدأ بالفهرس offset المستند إلى الرقم 0، وتتضمّن length عنصرًا.
- إذا كانت قيمة
offsetسالبة، يشير ذلك إلى موضع البدء من نهاية المصفوفة، ويكون-1هو العنصر الأخير. - إذا كانت قيمة
lengthأكبر من عدد العناصر المتبقية في الصفيفة بعدoffset، يمتد الناتج إلى نهاية الصفيفة. - يجب أن تكون قيمة
lengthغير سالبة، وإلا سيتم عرض رسالة خطأ.
أمثلة:
| مصفوفة | offset | الطول | array_slice(array, offset, length) |
|---|---|---|---|
| [1, 2, 3, 4, 5] | 1 | 3 | [2, 3, 4] |
| [1, 2, 3, 4, 5] | -2 | 2 | [4, 5] |
| [1, 2, 3] | 1 | 5 | [2, 3] |
| [1, 2, 3] | 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والفهرس المقابل المستند إلى 0.
أمثلة:
| مصفوفة | تعبير | array_transform(array, expression) |
|---|---|---|
| [1, 2, 3] | x -> x * 2 | [2, 4, 6] |
| [1, 2, 3] | x -> x + 1 | [2, 3, 4] |
| [10, 20] | (x, i) -> x + i | [10, 21] |
| [] | x -> 1 | [] |
MAXIMUM
البنية:
maximum(array: ARRAY) -> ANY
الوصف:
تعرض هذه الدالة الحد الأقصى للقيمة في array.
- يتم تجاهل قيم
NULLأثناء المقارنة. - إذا كانت
arrayفارغة أو تحتوي على قيمNULLفقط، تعرضNULL.
أمثلة:
| مصفوفة | maximum(array) |
|---|---|
| [1, 5, 2] | 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 | [5, 4, 3] |
| [1, null, 5] | 3 | [5, 1] |
MINIMUM
البنية:
minimum(array: ARRAY) -> ANY
الوصف:
تعرض هذه الدالة الحد الأدنى للقيمة في array.
- يتم تجاهل قيم
NULLأثناء المقارنة. - إذا كانت
arrayفارغة أو تحتوي على قيمNULLفقط، تعرضNULL.
أمثلة:
| مصفوفة | minimum(array) |
|---|---|
| [1, 5, 2] | 1 |
| [5, null, 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 | [1, 2, 3] |
| [5, null, 1] | 3 | [1, 5] |
SUM
البنية:
sum(array: ARRAY) -> INT64 | FLOAT64
الوصف:
تعرض مجموع كل قيم NUMERIC في ARRAY.
- يتم تجاهل القيم غير الرقمية في المصفوفة.
- إذا كانت أي قيمة رقمية في الصفيف هي
NaN، تعرض الدالةNaN. - يتم تحديد نوع القيمة التي تم إرجاعها حسب أوسع نوع رقمي في المصفوفة:
INT64<FLOAT64. - إذا حدث تجاوز سعة عدد صحيح 64 بت قبل جمع أي قيمة نقطة عائمة، سيتم عرض خطأ. إذا تم جمع قيم الفاصلة العائمة، سيؤدي تجاوز الحد الأقصى إلى +/- قيمة لا نهائية.
- إذا لم تحتوِ المصفوفة على أي قيم عددية، ستعرض الدالة
NULL.
أمثلة:
| مصفوفة | sum(array) |
|---|---|
| [1, 2, 3] | 6L |
| [1L, 2L, 3L] | 6L |
| [2000000000, 2000000000] | 4000000000L |
| [10, 20.5] | 30.5 |
| [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) |
|---|---|---|
| 1L | 1L | TRUE |
| 1.0 | 1L | TRUE |
| -1.0 | 1L | FALSE |
| NaN | NaN | TRUE |
NULL |
NULL |
TRUE |
NULL |
ABSENT |
FALSE |
الوصف:
تعرض الدالة TRUE إذا كانت x وy متساويتين، وتعرض 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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .select(Field.of("rating").equal(5).as_("hasPerfectRating")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(equal(field("rating"), 5).as("hasPerfectRating")) .execute() .get();
GREATER_THAN
البنية:
greater_than(x: ANY, y: ANY) -> BOOLEAN
الوصف:
تعرض الدالة TRUE إذا كانت x أكبر من y، وتعرض FALSE في الحالات الأخرى.
إذا لم يكن بالإمكان مقارنة x وy، يتم عرض FALSE.
أمثلة:
x |
y |
greater_than(x, y) |
|---|---|---|
| 1L | 0.0 | TRUE |
| 1L | 1L | FALSE |
| 1L | 2L | FALSE |
| "foo" | 0L | FALSE |
| 0L | "foo" | FALSE |
| NaN | 0L | FALSE |
| 0L | NaN | 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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .select(Field.of("rating").greater_than(4).as_("hasHighRating")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(greaterThan(field("rating"), 4).as("hasHighRating")) .execute() .get();
GREATER_THAN_OR_EQUAL
البنية:
greater_than_or_equal(x: ANY, y: ANY) -> BOOLEAN
الوصف:
تعرض الدالة القيمة TRUE إذا كانت x أكبر من أو تساوي y، وتعرض FALSE في الحالات الأخرى.
إذا لم يكن بالإمكان مقارنة x وy، يتم عرض FALSE.
أمثلة:
x |
y |
greater_than_or_equal(x, y) |
|---|---|---|
| 1L | 0.0 | TRUE |
| 1L | 1L | TRUE |
| 1L | 2L | FALSE |
| "foo" | 0L | FALSE |
| 0L | "foo" | FALSE |
| NaN | 0L | FALSE |
| 0L | NaN | 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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(greaterThanOrEqual(field("published"), 1900).as("publishedIn20thCentury")) .execute() .get();
LESS_THAN
البنية:
less_than(x: ANY, y: ANY) -> BOOLEAN
الوصف:
تعرض الدالة TRUE إذا كانت قيمة x أقل من y، وتعرض FALSE في الحالات الأخرى.
إذا لم يكن بالإمكان مقارنة x وy، يتم عرض FALSE.
أمثلة:
x |
y |
less_than(x, y) |
|---|---|---|
| 1L | 0.0 | FALSE |
| 1L | 1L | FALSE |
| 1L | 2L | TRUE |
| "foo" | 0L | FALSE |
| 0L | "foo" | FALSE |
| NaN | 0L | FALSE |
| 0L | NaN | 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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .select(Field.of("published").less_than(1923).as_("isPublicDomainProbably")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(lessThan(field("published"), 1923).as("isPublicDomainProbably")) .execute() .get();
LESS_THAN_OR_EQUAL
البنية:
less_than_or_equal(x: ANY, y: ANY) -> BOOLEAN
الوصف:
تعرض الدالة القيمة TRUE إذا كانت x أقل من أو تساوي y، وتعرض FALSE في الحالات الأخرى.
إذا لم يكن بالإمكان مقارنة x وy، يتم عرض FALSE.
أمثلة:
x |
y |
less_than(x, y) |
|---|---|---|
| 1L | 0.0 | FALSE |
| 1L | 1L | TRUE |
| 1L | 2L | TRUE |
| "foo" | 0L | FALSE |
| 0L | "foo" | FALSE |
| NaN | 0L | FALSE |
| 0L | NaN | 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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(lessThanOrEqual(field("rating"), 2).as("hasBadRating")) .execute() .get();
NOT_EQUAL
البنية:
not_equal(x: ANY, y: ANY) -> BOOLEAN
الوصف:
تعرض الدالة TRUE إذا كانت x لا تساوي y، وتعرض FALSE في الحالات الأخرى.
أمثلة:
x |
y |
not_equal(x, y) |
|---|---|---|
| 1L | 1L | FALSE |
| 1.0 | 1L | FALSE |
| -1.0 | 1L | TRUE |
| NaN | 0L | TRUE |
| NaN | NaN | 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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .select(Field.of("title").not_equal("1984").as_("not1984")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(notEqual(field("title"), "1984").as("not1984")) .execute() .get();
CMP
البنية:
cmp(x: ANY, y: ANY) -> Int64
الوصف:
تقارن بين x وy، وتعرض:
-
1Lإذا كانت قيمةxأكبر منy -
-1Lإذا كانت قيمةxأقل منy 0Lفي ما عدا ذلك.
على عكس دوال المقارنة الأخرى، تعمل الدالة cmp(...) على مستوى الأنواع، باتّباع الترتيب نفسه المستخدَم في مرحلة sort(...). اطّلِع على ترتيب أنواع القيم لمعرفة كيفية ترتيب القيم حسب الأنواع.
أمثلة:
x |
y |
cmp(x, y) |
|---|---|---|
| 1L | 1L | 0L |
| 1.0 | 1L | 0L |
| -1.0 | 1L | -1L |
| 42.5D | "foo" | -1L |
NULL |
NULL |
0L |
NULL |
ABSENT |
0L |
تصحيح أخطاء الدوال
| الاسم | الوصف |
EXISTS
|
تعرِض TRUE إذا لم تكن القيمة قيمة غائبة
|
IS_ABSENT
|
تعرض الدالة TRUE إذا كانت القيمة قيمة غائبة
|
IF_ABSENT
|
يستبدل القيمة بتعبير إذا كانت غير متوفّرة |
IS_ERROR
|
تتلقّى هذه الدالة ما إذا كان التعبير الأساسي قد طرح خطأً وتتحقّق من ذلك. |
IF_ERROR
|
تستبدل القيمة بتعبير إذا حدث خطأ |
ERROR
|
تنهي التقييم وتعرض خطأً مع الرسالة المحدّدة |
EXISTS
البنية:
exists(value: ANY) -> BOOLEAN
الوصف:
تعرض TRUE إذا لم تكن value هي القيمة الغائبة.
أمثلة:
value |
exists(value) |
|---|---|
| 0L | 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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .select(Field.of("rating").exists().as_("hasRating")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(exists(field("rating")).as("hasRating")) .execute() .get();
IS_ABSENT
البنية:
is_absent(value: ANY) -> BOOLEAN
الوصف:
تعرض الدالة TRUE إذا كانت value هي القيمة الغائبة، وتعرض FALSE في الحالات الأخرى. القيم غير المتوفرة هي القيم التي لا تتضمّنها البيانات المدخلة، مثل حقل مستند غير متوفر.
أمثلة:
value |
is_absent(value) |
|---|---|
| 0L | 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) |
|---|---|---|
| 5L | 0L | 5L |
NULL |
0L | NULL |
ABSENT |
0L | 0L |
IS_ERROR
البنية:
is_error(try: ANY) -> BOOLEAN
الوصف:
تعرض هذه الدالة TRUE إذا حدث خطأ أثناء تقييم try. تعرض 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 |
1L | 1L |
FALSE |
1L | 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
البنية:
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: فهرس البدء (يبدأ من 0) للشريحة. إذا كانت القيمة سالبة، تكون إزاحة من نهاية المرجع. length: عدد الأقسام المطلوب تضمينها في الشريحة
أمثلة:
ref |
offset |
length |
reference_slice(ref, offset, length) |
|---|---|---|---|
a/1/b/2/c/3 |
1L | 2L | b/2/c/3 |
a/1/b/2/c/3 |
0L | 2L | a/1/b/2 |
a/1/b/2/c/3 |
-2L | 2L | c/3 |
الدوال المنطقية
| الاسم | الوصف |
AND
|
تنفيذ عملية AND منطقية |
OR
|
تنفيذ عملية OR منطقية |
XOR
|
تنفيذ عملية XOR منطقية |
NOT
|
تنفيذ عملية NOT منطقية |
NOR
|
تنفيذ عملية NOR المنطقية |
CONDITIONAL
|
تقييم الفروع استنادًا إلى تعبير شرطي |
IF_NULL
|
عرض أول قيمة غير فارغة |
SWITCH_ON
|
تقييم الفروع استنادًا إلى سلسلة من الشروط |
EQUAL_ANY
|
تتحقّق مما إذا كانت القيمة تساوي أي عناصر في مصفوفة |
NOT_EQUAL_ANY
|
تتحقّق مما إذا كانت القيمة غير مساوية لأي عناصر في مصفوفة |
MAXIMUM
|
لعرض القيمة القصوى في مجموعة من القيم |
MINIMUM
|
لعرض القيمة الدنيا في مجموعة من القيم |
و
البنية:
and(x: BOOLEAN...) -> BOOLEAN
الوصف:
تعرض هذه الدالة القيمة المنطقية AND لقيمتين منطقيتين أو أكثر.
تعرض الدالة NULL إذا تعذّر استنتاج النتيجة بسبب أنّ أيًا من القيم المحدّدة هو ABSENT أو 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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select( and(greaterThan(field("rating"), 4), lessThan(field("price"), 10)) .as("under10Recommendation")) .execute() .get();
أو
البنية:
or(x: BOOLEAN...) -> BOOLEAN
الوصف:
تعرض هذه الدالة القيمة المنطقية OR لقيمتين منطقيتين أو أكثر.
تعرض الدالة NULL إذا تعذّر استنتاج النتيجة بسبب أنّ أيًا من القيم المحدّدة هو ABSENT أو 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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select( or(equal(field("genre"), "Fantasy"), arrayContains(field("tags"), "adventure")) .as("matchesSearchFilters")) .execute() .get();
XOR
البنية:
xor(x: BOOLEAN...) -> BOOLEAN
الوصف:
تعرض هذه الدالة عملية XOR المنطقية لقيمتين أو أكثر من القيم المنطقية.
تعرض الدالة NULL إذا كانت أي من القيم المحدّدة هي ABSENT أو 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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select( xor( arrayContains(field("tags"), "magic"), arrayContains(field("tags"), "nonfiction")) .as("matchesSearchFilters")) .execute() .get();
NOR
البنية:
nor(x: BOOLEAN...) -> BOOLEAN
الوصف:
تعرض هذه الدالة القيمة المنطقية NOR لقيمتين منطقيتين أو أكثر.
تعرض الدالة NULL إذا تعذّر استنتاج النتيجة بسبب أنّ أيًا من القيم المحدّدة هو ABSENT أو 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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(not(arrayContains(field("tags"), "nonfiction")).as("isFiction")) .execute() .get();
CONDITIONAL
البنية:
conditional(condition: BOOLEAN, true_case: ANY, false_case: ANY) -> ANY
الوصف:
تقيّم هذه الدالة true_case وتعرضها إذا كان تقييم condition هو TRUE.
تقيّم هذه الدالة false_case وتعرضها إذا تم حلّ الشرط إلى FALSE أو NULL أو قيمة ABSENT.
أمثلة:
condition |
true_case |
false_case |
conditional(condition, true_case, false_case) |
|---|---|---|---|
TRUE |
1L | 0L | 1L |
FALSE |
1L | 0L | 0L |
NULL |
1L | 0L | 0L |
ABSENT |
1L | 0L | 0L |
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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select( arrayConcat( field("tags"), conditional( greaterThan(field("pages"), 100), constant("longRead"), constant("shortRead"))) .as("extendedTags")) .execute() .get();
IF_NULL
البنية:
if_null(expr: ANY, replacement: ANY) -> ANY
الوصف:
تعرض expr إذا لم تكن NULL، وإلا فإنّها تقيّم replacement وتعرضها. لا يتم تقييم التعبير replacement في حال استخدام expr.
أمثلة:
expr |
replacement |
if_null(expr, replacement) |
|---|---|---|
| 1L | 2L | 1L |
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") |
|---|---|
| 1L | "one" |
| 2L | "اثنان" |
| 3L | "غير ذلك" |
EQUAL_ANY
البنية:
equal_any(value: ANY, search_space: ARRAY) -> BOOLEAN
الوصف:
تعرِض الدالة القيمة TRUE إذا كانت value في المصفوفة search_space.
أمثلة:
value |
search_space |
equal_any(value, search_space) |
|---|---|---|
| 0L | [1L, 2L, 3L] | FALSE |
| 2L | [1L, 2L, 3L] | TRUE |
NULL |
[1L, 2L, 3L] | FALSE |
NULL |
[1L, NULL] |
TRUE |
ABSENT |
[1L, NULL] |
FALSE |
| NaN | [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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select( equalAny(field("genre"), Arrays.asList("Science Fiction", "Psychological Thriller")) .as("matchesGenreFilters")) .execute() .get();
NOT_EQUAL_ANY
البنية:
not_equal_any(value: ANY, search_space: ARRAY) -> BOOLEAN
الوصف:
تعرِض TRUE إذا لم تكن value في مصفوفة search_space.
أمثلة:
value |
search_space |
not_equal_any(value, search_space) |
|---|---|---|
| 0L | [1L, 2L, 3L] | TRUE |
| 2L | [1L, 2L, 3L] | FALSE |
NULL |
[1L, 2L, 3L] | TRUE |
NULL |
[1L, NULL] |
FALSE |
ABSENT |
[1L, NULL] |
TRUE |
| NaN | [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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select( notEqualAny(field("author"), Arrays.asList("George Orwell", "F. Scott Fitzgerald")) .as("byExcludedAuthors")) .execute() .get();
MAXIMUM
البنية:
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 |
| 0.0 | -5 لتر | 0.0 |
| "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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .select(Field.of("rating").logical_maximum(1).as_("flooredRating")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(logicalMaximum(field("rating"), 1).as("flooredRating")) .execute() .get();
MINIMUM
البنية:
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 |
| 0.0 | -5 لتر | -5 لتر |
| "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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .select(Field.of("rating").logical_minimum(5).as_("cappedRating")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(logicalMinimum(field("rating"), 5).as("cappedRating")) .execute() .get();
دوال الخريطة
| الاسم | الوصف |
MAP
|
تنشئ هذه الدالة قيمة خريطة من سلسلة من أزواج المفتاح/القيمة. |
MAP_GET
|
لعرض القيمة في خريطة مع مفتاح محدّد |
MAP_SET
|
تعرض نسخة من خريطة تتضمّن سلسلة من المفاتيح المعدَّلة |
MAP_REMOVE
|
لعرض نسخة من خريطة تمت إزالة سلسلة من المفاتيح منها |
MAP_MERGE
|
يدمج سلسلة من الخرائط معًا. |
CURRENT_CONTEXT
|
تعرض هذه السمة السياق الحالي كخريطة. |
MAP_KEYS
|
تعرض هذه الدالة مصفوفة تتضمّن جميع المفاتيح في خريطة. |
MAP_VALUES
|
تعرض هذه الدالة صفيفًا يتضمّن جميع القيم في خريطة. |
MAP_ENTRIES
|
تعرض هذه الدالة صفيفًا من أزواج المفتاح والقيمة لخريطة. |
MAP
البنية:
map(key: STRING, value: ANY, ...) -> MAP
الوصف:
تنشئ هذه الدالة خريطة من سلسلة من أزواج المفاتيح والقيم.
MAP_GET
البنية:
map_get(map: ANY, key: STRING) -> ANY
الوصف:
تعرِض هذه الدالة القيمة في خريطة مع مفتاح محدّد. تعرض الدالة القيمة ABSENT إذا لم يكن key متوفّرًا في الخريطة، أو إذا لم تكن الوسيطة map من النوع MAP.
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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .select(Field.of("awards").map_get("pulitzer").as_("hasPulitzerAward")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(mapGet(field("awards"), "pulitzer").as("hasPulitzerAward")) .execute() .get();
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
|
تعرض هذه الدالة عدد أحرف Unicode في قيمة STRING
|
STARTS_WITH
|
عرض TRUE إذا كان STRING يبدأ ببادئة معيّنة
|
ENDS_WITH
|
تعرِض TRUE إذا انتهى STRING بلاحقة معيّنة
|
LIKE
|
تعرض TRUE إذا كان STRING يطابق نمطًا
|
REGEX_CONTAINS
|
تعرض الدالة TRUE إذا كانت القيمة تطابق تعبيرًا عاديًا بشكل جزئي أو كامل
|
REGEX_MATCH
|
تعرض الدالة TRUE إذا كان أي جزء من القيمة يتطابق مع تعبير عادي
|
STRING_CONCAT
|
يجمع بين عدة STRING في STRING
|
STRING_CONTAINS
|
تعرض TRUE إذا كانت القيمة تحتوي على STRING
|
STRING_INDEX_OF
|
تعرض هذه الدالة الفهرس المستند إلى الرقم 0 لأول ظهور للقيمة 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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .select(Field.of("title").byte_length().as_("titleByteLength")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(byteLength(field("title")).as("titleByteLength")) .execute() .get();
CHAR_LENGTH
البنية:
char_length(value: STRING) -> INT64
الوصف:
تعرض هذه الدالة عدد نقاط رموز Unicode في قيمة STRING.
أمثلة:
| القيمة | char_length(value) |
|---|---|
| "abc" | 3 |
| "مرحبًا" | 5 |
| "world" | 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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .select(Field.of("title").char_length().as_("titleCharLength")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(charLength(field("title")).as("titleCharLength")) .execute() .get();
STARTS_WITH
البنية:
starts_with(value: STRING, prefix: STRING) -> BOOLEAN
الوصف:
تعرِض الدالة القيمة TRUE إذا كانت السلسلة value تبدأ بالسلسلة prefix.
أمثلة:
| القيمة | بادئة | starts_with(value, prefix) |
|---|---|---|
| "abc" | "a" | صحيح |
| "abc" | "ب" | خطأ |
| "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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .select( Field.of("title").starts_with("The").as_("needsSpecialAlphabeticalSort") ) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(startsWith(field("title"), "The").as("needsSpecialAlphabeticalSort")) .execute() .get();
ENDS_WITH
البنية:
ends_with(value: STRING, postfix: STRING) -> BOOLEAN
الوصف:
تعرِض TRUE إذا كانت value تنتهي بـ postfix.
أمثلة:
| القيمة | لاحقة | ends_with(value, postfix) |
|---|---|---|
| "abc" | "c" | صحيح |
| "abc" | "ب" | خطأ |
| "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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("inventory/devices/laptops") .select(endsWith(field("name"), "16 inch").as("16InLaptops")) .execute() .get();
أعجبني
البنية:
like(value: STRING, pattern: STRING) -> BOOLEAN
الوصف:
تعرض TRUE إذا كان value مطابقًا pattern.
أمثلة:
| القيمة | نموذج | like(value, pattern) |
|---|---|---|
| "Firestore" | "Fire%" | صحيح |
| "Firestore" | %store | صحيح |
| "Datastore" | "Data_tore" | صحيح |
| "100%" | "100\%" | صحيح |
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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .select(Field.of("genre").like("%Fiction").as_("anyFiction")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(like(field("genre"), "%Fiction").as("anyFiction")) .execute() .get();
REGEX_CONTAINS
البنية:
regex_contains(value: STRING, pattern: STRING) -> BOOLEAN
الوصف:
تعرض هذه الدالة TRUE إذا كان جزء من value يتطابق مع pattern. إذا لم يكن pattern تعبيرًا عاديًا صالحًا، ستعرض هذه الدالة error.
تتّبع التعبيرات العادية بنية مكتبة re2.
أمثلة:
| القيمة | نموذج | regex_contains(value, pattern) |
|---|---|---|
| "Firestore" | نار | صحيح |
| "Firestore" | "store$" | صحيح |
| "Firestore" | "data" | خطأ |
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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("documents") .select( regexContains(field("title"), "Firestore (Enterprise|Standard)") .as("isFirestoreRelated")) .execute() .get();
REGEX_MATCH
البنية:
regex_match(value: STRING, pattern: STRING) -> BOOLEAN
الوصف:
تعرض هذه الدالة TRUE إذا كانت value تطابق pattern تمامًا. إذا لم يكن 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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("documents") .select( regexMatch(field("title"), "Firestore (Enterprise|Standard)") .as("isFirestoreExactly")) .execute() .get();
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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(stringConcat(field("title"), " by ", field("author")).as("fullyQualifiedTitle")) .execute() .get();
STRING_CONTAINS
البنية:
string_contains(value: STRING, substring: STRING) -> BOOLEAN
الوصف:
تتحقّق هذه الدالة ممّا إذا كانت value تحتوي على السلسلة الحرفية substring.
أمثلة:
| القيمة | سلسلة فرعية | string_contains(value, substring) |
|---|---|---|
| "abc" | "ب" | صحيح |
| "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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("articles") .select(Field.of("body").string_contains("Firestore").as_("isFirestoreRelated")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("articles") .select(stringContains(field("body"), "Firestore").as("isFirestoreRelated")) .execute() .get();
STRING_INDEX_OF
البنية:
string_index_of[T <: STRING | BYTES](value: T, search: T) -> INT64
الوصف:
تعرِض هذه الدالة الفهرس المستند إلى الرقم 0 لأول ظهور لـ search في value.
- تعرض الدالة القيمة
-1إذا لم يتم العثور علىsearch. - إذا كانت
valueقيمةSTRING، يتم قياس النتيجة بنقاط رموز Unicode. إذا كانت قيمةBYTES، يتم قياسها بالبايت. - إذا كانت
searchقيمةSTRINGأوBYTESفارغة، تكون النتيجة0.
أمثلة:
| القيمة | عملية بحث واحدة | string_index_of(value, search) |
|---|---|---|
| "hello world" | "o" | 4 |
| "hello world" | "l" | 2 |
| "hello world" | "z" | -1 |
| "banana" | "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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("authors") .select(Field.of("name").to_upper().as_("uppercaseName")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("authors") .select(toUpper(field("name")).as("uppercaseName")) .execute() .get();
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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("authors") .select(equal(toLower(field("genre")), "fantasy").as("isFantasy")) .execute() .get();
SUBSTRING
البنية:
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بنقاط ترميز Unicode. إذا كانت قيمةBYTES، يتم قياسها بالبايت.إذا كانت قيمة
positionأكبر من طولinput، يتم عرض سلسلة فرعية فارغة. إذا كانpositionزائدlengthأكبر من طولinput، يتم اقتطاع السلسلة الفرعية إلى نهايةinput.إذا كانت قيمة
positionسالبة، يتم تحديد الموضع من نهاية الإدخال. إذا كان العدد السالبpositionأكبر من حجم الإدخال، يتم ضبط الموضع على صفر. يجب أن تكون قيمةlengthغير سالبة.
أمثلة:
في حال عدم توفّر length:
| إدخال | الموضع | substring(input, position) |
|---|---|---|
| "abc" | 0 | "abc" |
| "abc" | 1 | "bc" |
| "abc" | 3 | "" |
| "abc" | -1 | "c" |
| b"abc" | 1 | b"bc" |
عند تقديم length:
| إدخال | الموضع | الطول | substring(input, position, length) |
|---|---|---|---|
| "abc" | 0 | 1 | "a" |
| "abc" | 1 | 2 | "bc" |
| "abc" | -1 | 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();
Python
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() )
Java
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();
STRING_REVERSE
البنية:
string_reverse[T <: STRING | BYTES](input: T) -> T
الوصف:
تعرض هذه الدالة الإدخال المقدَّم بترتيب عكسي.
يتم تحديد الأحرف من خلال نقاط رموز Unicode عندما يكون الإدخال 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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .select(Field.of("name").string_reverse().as_("reversedName")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(reverse(field("name")).as("reversedName")) .execute() .get();
STRING_REPEAT
البنية:
string_repeat[T <: STRING | BYTES](input: T, repetitions: INT64) -> T
الوصف:
تعرض input مكرّرة repetitions مرة.
- يجب أن يكون
repetitionsعددًا صحيحًا غير سالب. - إذا كانت
repetitionsهي0، تعرض الدالة قيمة فارغة من النوع نفسه مثلinput. - إذا تجاوزت النتيجة الحد الأقصى المسموح به للحجم (1 ميغابايت)، سيظهر خطأ.
أمثلة:
| إدخال | التكرارات | 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
البنية:
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:
| إدخال | قيم_الاقتطاع | 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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .select(Field.of("name").trim().as_("whitespaceTrimmedName")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(trim(field("name")).as("whitespaceTrimmedName")) .execute() .get();
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
البنية:
split(input: STRING) -> ARRAY<STRING>
split[T <: STRING | BYTES](input: T, delimiter: T) -> ARRAY<T>
الوصف:
تقسيم قيمة STRING أو BYTES باستخدام محدّد
بالنسبة إلى
STRING، يكون المحدّد التلقائي هو الفاصلة,. يتم التعامل مع المُحدِّد كسلسلة واحدة.بالنسبة إلى
BYTES، يجب تحديد محدّد.يؤدي التقسيم باستخدام محدد فارغ إلى إنشاء صفيف من نقاط الرموز Unicode لقيم
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 بالتوقيت العالمي المتّفق عليه |
| 1997-05-31 04:30:30 UTC | "day" | "America/Los_Angeles" | 1997-05-30 07:00:00 بالتوقيت العالمي المتفق عليه |
| 2001-03-16 04:00:00 بالتوقيت العالمي المتفق عليه | "week(friday) | غير متوفر | 2001-03-16 00:00:00 بالتوقيت العالمي المتفق عليه |
| 2001-03-23 04:00:00 UTC | "week(friday) | "America/Los_Angeles" | 2001-03-23 17:00:00 UTC |
| 2026-01-24 20:00:00 بالتوقيت العالمي المتفق عليه | "شهر" | "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 يُنشئ error إذا تعذّر تحويل input إلى TIMESTAMP صالح.
أمثلة:
input |
unix_micros_to_timestamp(input) |
|---|---|
| 0L | 1970-01-01 00:00:00 بالتوقيت العالمي المتّفق عليه |
| 400123456L | 1970-01-01 00:06:40.123456 UTC |
| -1000000L | 1969-12-31 23:59:59 UTC |
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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("documents") .select(unixMicrosToTimestamp(field("createdAtMicros")).as("createdAtString")) .execute() .get();
UNIX_MILLIS_TO_TIMESTAMP
البنية:
unix_millis_to_timestamp(input: INT64) -> TIMESTAMP
الوصف:
تحويل input (الذي يتم تفسيره على أنّه عدد المللي ثانية منذ 1970-01-01 00:00:00 UTC) إلى TIMESTAMP يُنشئ error إذا تعذّر تحويل input إلى TIMESTAMP صالح.
أمثلة:
input |
unix_millis_to_timestamp(input) |
|---|---|
| 0L | 1970-01-01 00:00:00 بالتوقيت العالمي المتّفق عليه |
| 4000123L | 1970-01-01 01:06:40.123 UTC |
| -1000000L | 1969-12-31 23:43:20 UTC |
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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("documents") .select(unixMillisToTimestamp(field("createdAtMillis")).as("createdAtString")) .execute() .get();
UNIX_SECONDS_TO_TIMESTAMP
البنية:
unix_seconds_to_timestamp(input: INT64) -> TIMESTAMP
الوصف:
تحويل input (الذي يتم تفسيره على أنّه عدد الثواني منذ 1970-01-01 00:00:00 UTC) إلى TIMESTAMP. يُنشئ error إذا تعذّر تحويل input إلى TIMESTAMP صالح.
أمثلة:
input |
unix_seconds_to_timestamp(input) |
|---|---|
| 0L | 1970-01-01 00:00:00 بالتوقيت العالمي المتّفق عليه |
| 60L | 1970-01-01 00:01:00 UTC |
| -300L | 1969-12-31 23:55:00 UTC |
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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("documents") .select(unixSecondsToTimestamp(field("createdAtSeconds")).as("createdAtString")) .execute() .get();
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) |
|---|---|---|---|
| 2025-02-20 00:00:00 بالتوقيت العالمي المتفق عليه | "دقيقة" | 2L | 2025-02-20 00:02:00 بالتوقيت العالمي المتفق عليه |
| 2025-02-20 00:00:00 بالتوقيت العالمي المتفق عليه | "ساعة" | -4L | 2025-02-19 20:00:00 بالتوقيت العالمي المتفق عليه |
| 2025-02-20 00:00:00 بالتوقيت العالمي المتفق عليه | "day" | 5L | 2025-02-25 00:00:00 بالتوقيت العالمي المتفق عليه |
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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("documents") .select(timestampAdd(field("createdAt"), "day", 3653).as("expiresAt")) .execute() .get();
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) |
|---|---|---|---|
| 2026-07-04 00:00:00 بالتوقيت العالمي المتفق عليه | "دقيقة" | 40L | 2026-07-03 23:20:00 بالتوقيت العالمي المتّفق عليه |
| 2026-07-04 00:00:00 بالتوقيت العالمي المتفق عليه | "ساعة" | -24L | 2026-07-05 00:00:00 بالتوقيت العالمي المتفق عليه |
| 2026-07-04 00:00:00 بالتوقيت العالمي المتفق عليه | "day" | 3L | 2026-07-01 00:00:00 بالتوقيت العالمي المتفق عليه |
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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("documents") .select(timestampSubtract(field("expiresAt"), "day", 14).as("sendWarningTimestamp")) .execute() .get();
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:00:00 بالتوقيت العالمي المتّفق عليه | 0L |
| 1970-01-01 00:06:40.123456 UTC | 400123456L |
| 1969-12-31 23:59:59 UTC | -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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("documents") .select(timestampToUnixMicros(field("dateString")).as("unixMicros")) .execute() .get();
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 00:00:00 بالتوقيت العالمي المتّفق عليه | 0L |
| 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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("documents") .select(timestampToUnixMillis(field("dateString")).as("unixMillis")) .execute() .get();
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) |
|---|---|
| 1970-01-01 00:00:00 بالتوقيت العالمي المتّفق عليه | 0L |
| 1970-01-01 00:01:00 UTC | 60L |
| 1969-12-31 23:55:00 UTC | -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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("documents") .select(timestampToUnixSeconds(field("dateString")).as("unixSeconds")) .execute() .get();
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) |
|---|---|---|---|
| 2026-07-04 00:01:00 بالتوقيت العالمي المتفق عليه | 2026-07-04 00:00:00 بالتوقيت العالمي المتفق عليه | "ثانية" | 60L |
| 2026-07-04 00:00:00 بالتوقيت العالمي المتفق عليه | 2026-07-05 00:00:00 بالتوقيت العالمي المتفق عليه | "day" | -1L |
| 2026-07-04 00:00:59 بالتوقيت العالمي المتفق عليه | 2026-07-04 00:00:00 بالتوقيت العالمي المتفق عليه | "دقيقة" | 0L |
TIMESTAMP_EXTRACT
البنية:
timestamp_extract(timestamp: TIMESTAMP, part: STRING[, timezone: STRING]) -> INT64
الوصف:
تستخرج هذه الدالة جزءًا محدّدًا part (مثل السنة أو الشهر أو اليوم) من timestamp.
يجب أن تكون الوسيطة part سلسلة وأحد ما يلي:
microsecondmillisecondsecondminutehourdaydayofweek: تعرض قيمة تتراوح بين 1 (الأحد) و7 (السبت).dayofyear-
week: تعرض هذه الدالة رقم الأسبوع في السنة، بدءًا من 1 لأول يوم أحد في السنة. week([weekday]): تعرض رقم الأسبوع من العام، بدءًا منweekdayالمحدّد.monthquarteryearisoweek: تعرض رقم الأسبوع وفقًا لمعيار 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 بالتوقيت العالمي المتفق عليه | "year" | غير متوفر | 2025 |
| 2025-02-20 10:20:30 بالتوقيت العالمي المتفق عليه | "day" | غير متوفر | 20 |
| 2025-12-31 23:59:59 بالتوقيت العالمي المتفق عليه | "year" | "Asia/Tokyo" | 2026 |
دوال النوع
| الاسم | الوصف |
TYPE
|
لعرض نوع القيمة كـ STRING.
|
IS_TYPE
|
تعرض الدالة true إذا كانت القيمة تتطابق مع النوع المحدّد.
|
النوع
البنية:
type(input: ANY) -> STRING
الوصف:
تعرض هذه الدالة تمثيلاً كسلسلة للنوع input.
إذا تم تقديم قيمة غير متوفّرة، يتم عرض NULL.
أمثلة:
input |
type(input) |
|---|---|
| فارغ | "null" |
| صحيح | "boolean" |
| 1 | "int32" |
| -3L | "int64" |
| 3.14 | "float64" |
| 2024-01-01T00:00:00Z بالتوقيت العالمي المتفق عليه | "timestamp" |
| "foo" | "string" |
| b"foo" | "بايت" |
| [1, 2] | "array" |
| {"a": 1} | "map" |
path("c/d") |
"reference" |
vector([1.0, 2.0]) |
"vector" |
| ABSENT | فارغ |
أمثلة على العملاء
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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .select(Field.of("title").not_equal("1984").as_("not1984")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(notEqual(field("title"), "1984").as("not1984")) .execute() .get();
IS_TYPE
البنية:
is_type(input: ANY, type: STRING) -> BOOLEAN
الوصف:
تعرض الدالة true إذا كان input مطابقًا لـ type المحدّد، وإلا تعرض 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" | صحيح |
| صحيح | "boolean" | صحيح |
| 3.14 | "float64" | صحيح |
| "foo" | "string" | صحيح |
| b"foo" | "string" | خطأ |
| [1, 2] | "array" | صحيح |
| {"a": 1} | "map" | صحيح |
vector([1.0, 2.0]) |
"vector" | صحيح |
| ABSENT | "string" | فارغ |
| "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();
Python
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() )
Java
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();
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();
Python
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() )
Java
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();
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();
Python
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() )
Java
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();
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();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .select(Field.of("embedding").vector_length().as_("vectorLength")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(vectorLength(field("embedding")).as("vectorLength")) .execute() .get();