Tổng hợp
Bạn có thể dùng tất cả các hàm tổng hợp làm biểu thức cấp cao nhất trong giai đoạn aggregate(...).
| Tên | Mô tả |
COUNT
|
Trả về số lượng tài liệu. |
COUNT_IF
|
Trả về số lượng tài liệu mà một biểu thức cho kết quả là TRUE
|
COUNT_DISTINCT
|
Trả về số lượng giá trị riêng biệt, không phải NULL
|
SUM
|
Trả về tổng của tất cả các giá trị NUMERIC
|
AVERAGE
|
Trả về giá trị trung bình của tất cả các giá trị NUMERIC
|
MINIMUM
|
Trả về giá trị nhỏ nhất không phải là NULL
|
MAXIMUM
|
Trả về giá trị không phải NULL lớn nhất
|
FIRST
|
Trả về giá trị expression cho tài liệu đầu tiên.
|
LAST
|
Trả về giá trị expression cho tài liệu cuối cùng.
|
ARRAY_AGG
|
Trả về một mảng gồm tất cả các giá trị đầu vào. |
ARRAY_AGG_DISTINCT
|
Trả về một mảng gồm tất cả các giá trị đầu vào riêng biệt. |
COUNT
Cú pháp:
count() -> INT64
count(expression: ANY) -> INT64
Nội dung mô tả:
Trả về số lượng tài liệu từ giai đoạn trước đó mà expression đánh giá thành bất kỳ giá trị nào không phải NULL. Nếu không có expression nào được cung cấp, hàm này sẽ trả về tổng số tài liệu từ giai đoạn trước.
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
Cú pháp:
count_if(expression: BOOLEAN) -> INT64
Nội dung mô tả:
Trả về số lượng tài liệu từ giai đoạn trước mà expression đánh giá thành 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
Cú pháp:
count_distinct(expression: ANY) -> INT64
Nội dung mô tả:
Trả về số lượng giá trị riêng biệt không phải NULL, không phải ABSENT của 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
Cú pháp:
sum(expression: ANY) -> NUMBER
Nội dung mô tả:
Trả về tổng của tất cả các giá trị bằng số, bỏ qua các giá trị không phải là số. Trả về NaN nếu có giá trị là NaN.
Kết quả sẽ có cùng loại với loại đầu vào rộng nhất, ngoại trừ những trường hợp sau:
INTEGERsẽ được chuyển đổi thànhDOUBLEnếu không thể biểu thị dưới dạngINTEGER.
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
Cú pháp:
average(expression: ANY) -> FLOAT64
Nội dung mô tả:
Trả về giá trị trung bình của tất cả các giá trị số, bỏ qua các giá trị không phải là số.
Đánh giá là NaN nếu có giá trị là NaN hoặc NULL nếu không có giá trị số nào được tổng hợp.
Đầu ra sẽ có cùng loại với loại đầu vào, ngoại trừ những trường hợp sau:
INTEGERsẽ được chuyển đổi thànhDOUBLEnếu không thể biểu thị dưới dạngINTEGER.
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();
TỐI THIỂU
Cú pháp:
minimum(expression: ANY) -> ANY
Nội dung mô tả:
Trả về giá trị tối thiểu không phải NULL, không phải giá trị không có của expression khi được đánh giá trên mỗi tài liệu.
Nếu không có giá trị nào không phải NULL và không bị thiếu, thì NULL sẽ được trả về. Điều này áp dụng cả khi không có tài liệu nào được xem xét.
Nếu có nhiều giá trị tương đương tối thiểu, bạn có thể trả về bất kỳ giá trị nào trong số đó. Thứ tự loại giá trị tuân theo thứ tự được ghi lại.
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();
TỐI ĐA
Cú pháp:
maximum(expression: ANY) -> ANY
Nội dung mô tả:
Trả về giá trị lớn nhất không phải NULL, không phải giá trị trống của expression khi được đánh giá trên mỗi tài liệu.
Nếu không có giá trị nào không phải NULL và không bị thiếu, thì NULL sẽ được trả về. Điều này áp dụng cả khi không có tài liệu nào được xem xét.
Nếu có nhiều giá trị tương đương tối đa, thì hàm có thể trả về bất kỳ giá trị nào trong số đó. Thứ tự loại giá trị tuân theo thứ tự được ghi lại.
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
Cú pháp:
first(expression: ANY) -> ANY
Nội dung mô tả:
Trả về giá trị của expression cho tài liệu đầu tiên được trả về.
LAST
Cú pháp:
last(expression: ANY) -> ANY
Nội dung mô tả:
Trả về giá trị của expression cho tài liệu được trả về gần đây nhất.
ARRAY_AGG
Cú pháp:
array_agg(expression: ANY) -> ARRAY<ANY>
Nội dung mô tả:
Trả về một mảng chứa tất cả các giá trị của expression khi được đánh giá trên mỗi tài liệu.
Nếu biểu thức phân giải thành một giá trị không có, thì giá trị đó sẽ được chuyển đổi thành NULL.
Thứ tự của các phần tử trong mảng đầu ra không ổn định và bạn không nên dựa vào đó.
Hàm ARRAY_AGG_DISTINCT
Cú pháp:
array_agg_distinct(expression: ANY) -> ARRAY<ANY>
Nội dung mô tả:
Trả về một mảng chứa tất cả các giá trị riêng biệt của expression khi được đánh giá trên mỗi tài liệu.
Nếu biểu thức phân giải thành một giá trị không có, thì giá trị đó sẽ được chuyển đổi thành NULL.
Thứ tự của các phần tử trong mảng đầu ra không ổn định và bạn không nên dựa vào đó.
Hàm số học
Tất cả các hàm số học trong Cloud Firestore đều có những hành vi sau:
- Đánh giá là
NULLnếu có bất kỳ tham số đầu vào nào làNULL. - Đánh giá là
NaNnếu có đối số làNaN. - Tạo lỗi nếu xảy ra tình trạng tràn hoặc thiếu.
Ngoài ra, khi một hàm số học lấy nhiều đối số số thuộc các loại khác nhau (ví dụ: add(5.0, 6)), Cloud Firestore sẽ ngầm chuyển đổi các đối số thành loại đầu vào rộng nhất. Nếu chỉ có đầu vào INT32, thì kiểu dữ liệu trả về sẽ là INT64.
| Tên | Mô tả |
ABS
|
Trả về giá trị tuyệt đối của number
|
ADD
|
Trả về giá trị của x + y
|
SUBTRACT
|
Trả về giá trị của x - y
|
MULTIPLY
|
Trả về giá trị của x * y
|
DIVIDE
|
Trả về giá trị của x / y
|
MOD
|
Trả về số dư của phép chia x / y
|
CEIL
|
Trả về giá trị trần của number
|
FLOOR
|
Trả về giá trị sàn của number
|
ROUND
|
Làm tròn number đến places chữ số thập phân
|
TRUNC
|
Cắt bớt number thành places chữ số thập phân
|
POW
|
Trả về giá trị của base^exponent
|
SQRT
|
Trả về căn bậc hai của number
|
EXP
|
Trả về số Euler được nâng lên luỹ thừa của exponent
|
LN
|
Trả về lôgarit tự nhiên của number
|
LOG
|
Trả về lôgarit của number
|
LOG10
|
Trả về lôgarit của number theo cơ số 10
|
RAND
|
Trả về một số thực giả ngẫu nhiên |
ABS
Cú pháp:
abs[N <: INT32 | INT64 | FLOAT64](number: N) -> N
Nội dung mô tả:
Trả về giá trị tuyệt đối của một number.
- Gây ra lỗi khi hàm sẽ làm tràn giá trị
INT32hoặcINT64.
Ví dụ:
| số | abs(number) |
|---|---|
| 10 | 10 |
| -10 | 10 |
| 10L | 10L |
| -0,0 | 0.0 |
| 10.5 | 10.5 |
| -10,5 | 10.5 |
| -231 | [error] |
| -263 | [error] |
THÊM
Cú pháp:
add[N <: INT32 | INT64 | FLOAT64](x: N, y: N) -> N
Nội dung mô tả:
Trả về giá trị của x + y.
Ví dụ:
| x | năm | add(x, y) |
|---|---|---|
| 20 | 3 | 23 |
| 10 | 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();
TRỪ
Cú pháp:
subtract[N <: INT32 | INT64 | FLOAT64](x: N, y: N) -> N
Nội dung mô tả:
Trả về giá trị của x - y.
Ví dụ:
| x | năm | subtract(x, y) |
|---|---|---|
| 20 | 3 | 17 |
| 10 | 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
Cú pháp:
multiply[N <: INT32 | INT64 | FLOAT64](x: N, y: N) -> N
Nội dung mô tả:
Trả về giá trị của x * y.
Ví dụ:
| x | năm | multiply(x, y) |
|---|---|---|
| 20 | 3 | 60 |
| 10 | 1 | 10 |
| 22,5 | 2.0 | 45 |
| 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
Cú pháp:
divide[N <: INT32 | INT64 | FLOAT64](x: N, y: N) -> N
Nội dung mô tả:
Trả về giá trị của x / y. Phép chia số nguyên sẽ bị cắt bớt.
Ví dụ:
| x | năm | divide(x, y) |
|---|---|---|
| 20 | 3 | 6 |
| 10 | 3 | 3,333... |
| 22,5 | 2 | 11,25 |
| 10 | 0 | [error] |
| 1.0 | 0.0 | +inf |
| -1 | 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();
Sửa đổi
Cú pháp:
mod[N <: INT32 | INT64 | FLOAT64](x: N, y: N) -> N
Nội dung mô tả:
Trả về phần dư của x / y.
- Cho thấy một
errorkhiybằng 0 đối với các loại số nguyên (INT64). - Trả về
NaNkhiybằng 0 đối với các loại số thực (FLOAT64).
Ví dụ:
| x | năm | 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
Cú pháp:
ceil[N <: INT32 | INT64 | FLOAT64](number: N) -> N
Nội dung mô tả:
Trả về giá trị số nguyên nhỏ nhất không nhỏ hơn number.
Ví dụ:
| số | ceil(number) |
|---|---|
| 20 | 20 |
| 10 | 10 |
| 0 | 0 |
| 24L | 24L |
| -0,4 | -0,0 |
| 0,4 | 1.0 |
| 22,5 | 23 |
+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
Cú pháp:
floor[N <: INT32 | INT64 | FLOAT64](number: N) -> N
Nội dung mô tả:
Trả về giá trị số nguyên lớn nhất không lớn hơn number.
Ví dụ:
| số | floor(number) |
|---|---|
| 20 | 20 |
| 10 | 10 |
| 0 | 0 |
| 2147483648 | 2147483648 |
| -0,4 | -1 |
| 0,4 | 0.0 |
| 22,5 | 22 |
+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();
Hàm ROUND
Cú pháp:
round[N <: INT32 | INT64 | FLOAT64 | DECIMAL128](number: N) -> N
round[N <: INT32 | INT64 | FLOAT64 | DECIMAL128](number: N, places: INT64) -> N
Nội dung mô tả:
Làm tròn places chữ số của number. Làm tròn các chữ số ở bên phải dấu thập phân nếu places là số dương và ở bên trái dấu thập phân nếu là số âm.
- Nếu bạn chỉ cung cấp
number, hàm sẽ làm tròn đến giá trị nguyên gần nhất. - Làm tròn ra xa số 0 trong trường hợp số bán nguyên.
- Một
errorsẽ được gửi nếu việc làm tròn bằng giá trịplacesâm dẫn đến tràn số.
Ví dụ:
| số | địa điểm | round(number, places) |
|---|---|---|
| 15,5 | 0 | 16.0 |
| -15,5 | 0 | -16 |
| 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();
Hàm TRUNC
Cú pháp:
trunc[N <: Number](number: N) -> N
trunc[N <: Number](number: N, places: INT64) -> N
Nội dung mô tả:
Cắt bớt một number thành một số lượng places chữ số thập phân được chỉ định. Cắt bớt các chữ số ở bên phải dấu thập phân nếu places là số dương và ở bên trái dấu thập phân nếu places là số âm.
- Nếu chỉ có
number, hàm sẽ cắt bớt thành giá trị nguyên gần nhất về 0. - Hệ thống sẽ gửi một
errornếu việc cắt bớt dẫn đến tràn.
Ví dụ:
| số | địa điểm | trunc(number, places) |
|---|---|---|
| 15,5 | 0 | 15 |
| -15,5 | 0 | -15 |
| 15 | 1 | 15 |
| 15 | 0 | 15 |
| 15 | -1 | 10 |
| 15 | -2 | 0 |
| 15,48924 | 1 | 15,4 |
| -15,48924 | 2 | -15,48 |
POW
Cú pháp:
pow(base: FLOAT64, exponent: FLOAT64) -> FLOAT64
Nội dung mô tả:
Trả về giá trị base được nâng lên luỹ thừa exponent.
Gửi lỗi nếu
base <= 0vàexponentlà số âm.Đối với mọi
exponent,pow(1, exponent)là 1.Đối với mọi
base,pow(base, 0)là 1.
Ví dụ:
| cơ sở | số mũ | 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
Cú pháp:
sqrt[N <: FLOAT64 | DECIMAL128](number: N) -> N
Nội dung mô tả:
Trả về căn bậc hai của một number.
- Gửi một
errornếunumberlà số âm.
Ví dụ:
| số | 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
Cú pháp:
exp(exponent: FLOAT64) -> FLOAT64
Nội dung mô tả:
Trả về giá trị của số Euler được nâng lên luỹ thừa exponent, còn được gọi là hàm mũ tự nhiên.
Ví dụ:
| số mũ | 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
Cú pháp:
ln(number: FLOAT64) -> FLOAT64
Nội dung mô tả:
Trả về lôgarit tự nhiên của number. Hàm này tương đương với log(number).
Ví dụ:
| số | 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
Cú pháp:
log(number: FLOAT64, base: FLOAT64) -> FLOAT64
log(number: FLOAT64) -> FLOAT64
Nội dung mô tả:
Trả về lôgarit của number theo cơ số base.
- Nếu chỉ cung cấp
number, thì hàm này sẽ trả về lôgarit củanumbertheo cơ sốbase(tương đương vớiln(number)).
Ví dụ:
| số | cơ sở | 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] |
Hàm LOG10
Cú pháp:
log10(x: FLOAT64) -> FLOAT64
Nội dung mô tả:
Trả về lôgarit của number theo cơ số 10.
Ví dụ:
| số | log10(number) |
|---|---|
| 100 | 2.0 |
-inf |
NaN |
+inf |
+inf |
x <= 0 |
[error] |
RAND
Cú pháp:
rand() -> FLOAT64
Nội dung mô tả:
Trả về một số dấu phẩy động giả ngẫu nhiên, được chọn đồng nhất trong khoảng từ 0.0 (bao gồm) đến 1.0 (không bao gồm).
Hàm mảng
| Tên | Mô tả |
ARRAY
|
Trả về một ARRAY chứa một phần tử cho mỗi đối số đầu vào
|
ARRAY_CONCAT
|
Nối nhiều mảng thành một mảng duy nhất ARRAY
|
ARRAY_CONTAINS
|
Trả về TRUE nếu một ARRAY nhất định chứa một giá trị cụ thể
|
ARRAY_CONTAINS_ALL
|
Trả về TRUE nếu tất cả giá trị đều có trong ARRAY
|
ARRAY_CONTAINS_ANY
|
Trả về TRUE nếu có giá trị nào trong ARRAY
|
ARRAY_FILTER
|
Lọc bỏ các phần tử khỏi một ARRAY không đáp ứng một vị từ
|
ARRAY_FIRST
|
Trả về phần tử đầu tiên trong ARRAY
|
ARRAY_FIRST_N
|
Trả về n phần tử đầu tiên trong ARRAY
|
ARRAY_GET
|
Trả về phần tử tại một chỉ mục nhất định trong ARRAY
|
ARRAY_INDEX_OF
|
Trả về chỉ mục của lần xuất hiện đầu tiên của một giá trị trong ARRAY
|
ARRAY_INDEX_OF_ALL
|
Trả về tất cả chỉ mục của một giá trị trong ARRAY
|
ARRAY_LENGTH
|
Trả về số lượng phần tử trong một ARRAY
|
ARRAY_LAST
|
Trả về phần tử cuối cùng trong ARRAY
|
ARRAY_LAST_N
|
Trả về n phần tử cuối cùng trong một ARRAY
|
ARRAY_REVERSE
|
Đảo ngược thứ tự của các phần tử trong ARRAY
|
ARRAY_SLICE
|
Trả về một lát cắt của ARRAY
|
ARRAY_TRANSFORM
|
Biến đổi các phần tử trong ARRAY bằng cách áp dụng biểu thức cho từng phần tử
|
MAXIMUM
|
Trả về giá trị lớn nhất trong một ARRAY
|
MAXIMUM_N
|
Trả về n giá trị lớn nhất trong một ARRAY
|
MINIMUM
|
Trả về giá trị nhỏ nhất trong một ARRAY
|
MINIMUM_N
|
Trả về n giá trị nhỏ nhất trong một ARRAY
|
SUM
|
Trả về tổng của tất cả các giá trị NUMERIC trong một ARRAY.
|
JOIN
|
Tạo ra một phép nối các phần tử trong ARRAY dưới dạng giá trị STRING.
|
MẢNG
Cú pháp:
array(values: ANY...) -> ARRAY
Nội dung mô tả:
Tạo một mảng từ các phần tử đã cho.
- Nếu không có đối số, đối số đó sẽ được thay thế bằng
NULLtrong mảng kết quả.
Ví dụ:
| giá trị | array(values) |
|---|---|
| () | [] |
| (1, 2, 3) | [1, 2, 3] |
| ("a", 1, true) | ["a", 1, true] |
| (1, null) | [1, null] |
| (1; [2; 3]) | [1, [2, 3]] |
Hàm ARRAY_CONCAT
Cú pháp:
array_concat(arrays: ARRAY...) -> ARRAY
Nội dung mô tả:
Nối hai hoặc nhiều mảng thành một ARRAY duy nhất.
Ví dụ:
| mảng | 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
Cú pháp:
array_contains(array: ARRAY, value: ANY) -> BOOLEAN
Nội dung mô tả:
Trả về TRUE nếu tìm thấy value trong array, và FALSE trong trường hợp ngược lại.
Ví dụ:
| mảng | value | array_contains(array, value) |
|---|---|---|
| [1, 2, 3] | 2 | đúng |
| [[1, 2], [3]] | [1, 2] | đúng |
| [1, null] | null | đúng |
| "abc" | BẤT KỲ | error |
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
Cú pháp:
array_contains_all(array: ARRAY, search_values: ARRAY) -> BOOLEAN
Nội dung mô tả:
Trả về TRUE nếu tìm thấy tất cả search_values trong array và FALSE trong trường hợp ngược lại.
Ví dụ:
| mảng | search_values | array_contains_all(array, search_values) |
|---|---|---|
| [1, 2, 3] | [1, 2] | đúng |
| [1, 2, 3] | [1, 4] | false |
| [1, null] | [không] | đúng |
| [NaN] | [NaN] | đúng |
| [] | [] | đúng |
| [1, 2, 3] | [] | đúng |
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();
Hàm ARRAY_CONTAINS_ANY
Cú pháp:
array_contains_any(array: ARRAY, search_values: ARRAY) -> BOOLEAN
Nội dung mô tả:
Trả về TRUE nếu tìm thấy bất kỳ search_values nào trong array, và FALSE trong trường hợp ngược lại.
Ví dụ:
| mảng | search_values | array_contains_any(array, search_values) |
|---|---|---|
| [1, 2, 3] | [4, 1] | đúng |
| [1, 2, 3] | [4, 5] | false |
| [1, 2, null] | [không] | đúng |
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();
Hàm ARRAY_FILTER
Cú pháp:
array_filter(array: ARRAY, predicate: (ANY) -> BOOLEAN) -> ARRAY
Nội dung mô tả:
Lọc array bằng biểu thức predicate, trả về một mảng mới chỉ chứa các phần tử đáp ứng vị từ.
- Đối với mỗi phần tử trong
array,predicatesẽ được đánh giá. Nếu trả vềtrue, phần tử sẽ được đưa vào kết quả; nếu không (nếu trả vềfalsehoặcnull), phần tử sẽ bị bỏ qua. - Nếu
predicateđánh giá thành một giá trị không phải là giá trị Boolean hoặc giá trị không rỗng, thì hàm sẽ trả về lỗi.
Ví dụ:
| mảng | vị từ | 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 | [] |
Hàm ARRAY_GET
Cú pháp:
array_get(array: ARRAY, index: INT64) -> ANY
Nội dung mô tả:
Trả về phần tử tại index dựa trên 0 trong array.
- Nếu
indexlà số âm, các phần tử sẽ được truy cập từ cuối mảng, trong đó-1là phần tử cuối cùng. - Nếu
arraykhông thuộc kiểuARRAYvà không phải lànull, hàm sẽ trả về lỗi. - Nếu
indexnằm ngoài phạm vi, hàm sẽ trả về một giá trị không có. - Nếu
indexkhông thuộc kiểuINT64, hàm sẽ trả về lỗi.
Ví dụ:
| mảng | index | array_get(array, index) |
|---|---|---|
| [1, 2, 3] | 0 | 1 |
| [1, 2, 3] | -1 | 3 |
| [1, 2, 3] | 3 | vắng mặt |
| [1, 2, 3] | -4 | vắng mặt |
| "abc" | 0 | error |
| null | 0 | null |
Array |
"a" | error |
Array |
2.0 | error |
Hàm ARRAY_LENGTH
Cú pháp:
array_length(array: ARRAY) -> INT64
Nội dung mô tả:
Trả về số lượng phần tử trong array.
Ví dụ:
| mảng | 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();
Hàm ARRAY_REVERSE
Cú pháp:
array_reverse(array: ARRAY) -> ARRAY
Nội dung mô tả:
Đảo ngược array đã cho.
Ví dụ:
| mảng | 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();
Hàm ARRAY_FIRST
Cú pháp:
array_first(array: ARRAY) -> ANY
Nội dung mô tả:
Trả về phần tử đầu tiên trong array. Điều này tương đương với array_get(array, 0).
- Nếu
arraylà giá trị trống, hàm sẽ trả về một giá trị không có.
Ví dụ:
| mảng | array_first(array) |
|---|---|
| [1, 2, 3] | 1 |
| [] | vắng mặt |
Hàm ARRAY_FIRST_N
Cú pháp:
array_first_n(array: ARRAY, n: INT64) -> ARRAY
Nội dung mô tả:
Trả về n phần tử đầu tiên của array. Điều này tương đương với array_slice(array, 0, n).
- Nếu
nlà số âm, hàm sẽ trả về lỗi.
Ví dụ:
| mảng | n | array_first_n(array, n) |
|---|---|---|
| [1, 2, 3, 4, 5] | 3 | [1, 2, 3] |
| [1, 2] | 3 | [1, 2] |
| [1, 2, 3] | 0 | [] |
Hàm ARRAY_INDEX_OF
Cú pháp:
array_index_of(array: ARRAY, value: ANY) -> INT64
Nội dung mô tả:
Trả về chỉ mục dựa trên 0 của lần xuất hiện đầu tiên của value trong array. Trả về -1 nếu không tìm thấy value.
Ví dụ:
| mảng | value | array_index_of(array, value) |
|---|---|---|
| [1, 2, 3, 2] | 2 | 1 |
| [1, 2, 3] | 4 | -1 |
| [1, null, 3] | null | 1 |
ARRAY_INDEX_OF_ALL
Cú pháp:
array_index_of_all(array: ARRAY, value: ANY) -> ARRAY<INT64>
Nội dung mô tả:
Trả về một mảng chứa các chỉ mục dựa trên 0 của tất cả các lần xuất hiện của value trong array. Trả về [] nếu không tìm thấy value.
Ví dụ:
| mảng | value | array_index_of_all(array, value) |
|---|---|---|
| [1, 2, 3, 2] | 2 | [1, 3] |
| [1, 2, 3] | 4 | [] |
| [1, null, 3, null] | null | [1, 3] |
Hàm ARRAY_LAST
Cú pháp:
array_last(array: ARRAY) -> ANY
Nội dung mô tả:
Trả về phần tử cuối cùng trong array. Điều này tương đương với array_get(array, -1).
- Nếu
arraylà giá trị trống, hàm sẽ trả về một giá trị không có.
Ví dụ:
| mảng | array_last(array) |
|---|---|
| [1, 2, 3] | 3 |
| [] | vắng mặt |
Hàm ARRAY_LAST_N
Cú pháp:
array_last_n(array: ARRAY, n: INT64) -> ARRAY
Nội dung mô tả:
Trả về n phần tử cuối cùng của array.
- Nếu
nlà số âm, hàm sẽ trả về lỗi.
Ví dụ:
| mảng | n | array_last_n(array, n) |
|---|---|---|
| [1, 2, 3, 4, 5] | 3 | [3, 4, 5] |
| [1, 2] | 3 | [1, 2] |
| [1, 2, 3] | 0 | [] |
Hàm ARRAY_SLICE
Cú pháp:
array_slice(array: ARRAY, offset: INT64, length: INT64) -> ARRAY
Nội dung mô tả:
Trả về một tập hợp con của array, bắt đầu từ chỉ mục offset dựa trên 0 và bao gồm length phần tử.
- Nếu
offsetlà số âm, thì đó là vị trí bắt đầu từ cuối mảng, trong đó-1là phần tử cuối cùng. - Nếu
lengthlớn hơn số phần tử còn lại trong mảng sauoffset, thì kết quả sẽ kéo dài đến cuối mảng. lengthkhông được là số âm, nếu không sẽ trả về lỗi.
Ví dụ:
| mảng | bù trừ | chiều dài | 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 | [] |
Hàm ARRAY_TRANSFORM
Cú pháp:
array_transform(array: ARRAY, expression: (ANY) -> ANY) -> ARRAY
array_transform(array: ARRAY, expression: (ANY, INT64) -> ANY) -> ARRAY
Nội dung mô tả:
Biến đổi array bằng cách áp dụng expression cho từng phần tử, trả về một mảng mới có các phần tử đã biến đổi. Dãy đầu ra sẽ luôn có cùng kích thước với dãy đầu vào.
expressioncó thể là hàm một ngôielement -> resulthoặc hàm hai ngôi(element, index) -> result.- Nếu
expressionlà đơn nguyên, thì hàm này sẽ được gọi với từng phần tử củaarray. - Nếu
expressionlà nhị phân, thì hàm này sẽ được gọi với từng phần tử củaarrayvà chỉ mục tương ứng dựa trên 0.
Ví dụ:
| mảng | biểu thức | 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 | [] |
TỐI ĐA
Cú pháp:
maximum(array: ARRAY) -> ANY
Nội dung mô tả:
Trả về giá trị lớn nhất trong array.
- Các giá trị
NULLsẽ bị bỏ qua trong quá trình so sánh. - Nếu
arraytrống hoặc chỉ chứa các giá trịNULL, thì hàm sẽ trả vềNULL.
Ví dụ:
| mảng | maximum(array) |
|---|---|
| [1, 5, 2] | 5 |
| [1, null, 5] | 5 |
| ["a", "c", "b"] | "c" |
| [null, null] | null |
| [] | null |
MAXIMUM_N
Cú pháp:
maximum_n(array: ARRAY, n: INT64) -> ARRAY
Nội dung mô tả:
Trả về một mảng gồm n giá trị lớn nhất trong array theo thứ tự giảm dần.
- Các giá trị của
NULLsẽ bị bỏ qua. - Nếu
nlà số âm, hàm sẽ trả về lỗi.
Ví dụ:
| mảng | n | maximum_n(array, n) |
|---|---|---|
| [1, 5, 2, 4, 3] | 3 | [5, 4, 3] |
| [1, null, 5] | 3 | [5, 1] |
TỐI THIỂU
Cú pháp:
minimum(array: ARRAY) -> ANY
Nội dung mô tả:
Trả về giá trị nhỏ nhất trong array.
- Các giá trị
NULLsẽ bị bỏ qua trong quá trình so sánh. - Nếu
arraytrống hoặc chỉ chứa các giá trịNULL, thì hàm sẽ trả vềNULL.
Ví dụ:
| mảng | minimum(array) |
|---|---|
| [1, 5, 2] | 1 |
| [5, null, 1] | 1 |
| ["a", "c", "b"] | "a" |
| [null, null] | null |
| [] | null |
MINIMUM_N
Cú pháp:
minimum_n(array: ARRAY, n: INT64) -> ARRAY
Nội dung mô tả:
Trả về một mảng gồm n giá trị nhỏ nhất trong array theo thứ tự tăng dần.
- Các giá trị của
NULLsẽ bị bỏ qua. - Nếu
nlà số âm, hàm sẽ trả về lỗi.
Ví dụ:
| mảng | n | minimum_n(array, n) |
|---|---|---|
| [1, 5, 2, 4, 3] | 3 | [1, 2, 3] |
| [5, null, 1] | 3 | [1, 5] |
SUM
Cú pháp:
sum(array: ARRAY) -> INT64 | FLOAT64
Nội dung mô tả:
Trả về tổng của tất cả các giá trị NUMERIC trong một ARRAY.
- Các giá trị không phải là số trong mảng sẽ bị bỏ qua.
- Nếu có giá trị số nào trong mảng là
NaN, thì hàm sẽ trả vềNaN. - Kiểu dữ liệu trả về được xác định bằng loại số rộng nhất trong mảng:
INT64<FLOAT64. - Nếu xảy ra tràn số nguyên 64 bit trước khi bất kỳ giá trị dấu phẩy động nào được cộng, thì một lỗi sẽ được trả về. Nếu các giá trị dấu phẩy động được cộng lại, thì tình trạng tràn sẽ dẫn đến kết quả là +/- vô cực.
- Nếu mảng không chứa giá trị số nào, hàm sẽ trả về
NULL.
Ví dụ:
| mảng | 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] | error |
| [INT64.MAX_VALUE, 1, -1.0] | error |
| [INT64.MAX_VALUE, 1.0] | 9,223372036854776e+18 |
THAM GIA
Cú pháp:
join[T <: STRING | BYTES](array: ARRAY<T>, delimiter: T) -> STRING
join[T <: STRING | BYTES](array: ARRAY<T>, delimiter: T, null_text: T) -> STRING
Nội dung mô tả:
Trả về chuỗi kết hợp của các phần tử trong array dưới dạng STRING. array có thể thuộc kiểu dữ liệu STRING hoặc BYTES.
- Tất cả các phần tử trong
array,delimitervànull_textphải thuộc cùng một loại; tất cả đều phải làSTRINGhoặc tất cả đều phải làBYTES. - Nếu bạn cung cấp
null_text, mọi giá trịNULLtrongarraysẽ được thay thế bằngnull_text. - Nếu bạn không cung cấp
null_text, thì các giá trịNULLtrongarraysẽ bị loại khỏi kết quả.
Ví dụ:
Khi bạn không cung cấp null_text:
| mảng | dấu phân cách | 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'] | "," | error |
| ["a", "c"] | b',' | error |
| [b'a', b'c'] | "," | error |
Khi bạn cung cấp null_text:
| mảng | dấu phân cách | 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' | error |
| [b'a', null] | b',' | "N" | error |
Hàm so sánh
| Tên | Mô tả |
EQUAL
|
So sánh về sự bằng nhau |
GREATER_THAN
|
So sánh lớn hơn |
GREATER_THAN_OR_EQUAL
|
So sánh lớn hơn hoặc bằng |
LESS_THAN
|
So sánh nhỏ hơn |
LESS_THAN_OR_EQUAL
|
So sánh nhỏ hơn hoặc bằng |
NOT_EQUAL
|
So sánh không bằng |
CMP
|
So sánh chung |
EQUAL
Cú pháp:
equal(x: ANY, y: ANY) -> BOOLEAN
Ví dụ:
x |
y |
equal(x, y) |
|---|---|---|
| 1L | 1L | TRUE |
| 1.0 | 1L | TRUE |
| -1 | 1L | FALSE |
| NaN (Không phải số) | NaN (Không phải số) | TRUE |
NULL |
NULL |
TRUE |
NULL |
ABSENT |
FALSE |
Nội dung mô tả:
Trả về TRUE nếu x và y bằng nhau, nếu không thì trả về 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
Cú pháp:
greater_than(x: ANY, y: ANY) -> BOOLEAN
Nội dung mô tả:
Trả về TRUE nếu x lớn hơn y, và FALSE nếu ngược lại.
Nếu x và y không so sánh được, hàm sẽ trả về FALSE.
Ví dụ:
x |
y |
greater_than(x, y) |
|---|---|---|
| 1L | 0.0 | TRUE |
| 1L | 1L | FALSE |
| 1L | 2L | FALSE |
| "foo" | 0L | FALSE |
| 0L | "foo" | FALSE |
| NaN (Không phải số) | 0L | FALSE |
| 0L | NaN (Không phải số) | 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
Cú pháp:
greater_than_or_equal(x: ANY, y: ANY) -> BOOLEAN
Nội dung mô tả:
Trả về TRUE nếu x lớn hơn hoặc bằng y, và FALSE nếu ngược lại.
Nếu x và y không so sánh được, hàm sẽ trả về FALSE.
Ví dụ:
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 (Không phải số) | 0L | FALSE |
| 0L | NaN (Không phải số) | 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();
NHỎ_HƠN
Cú pháp:
less_than(x: ANY, y: ANY) -> BOOLEAN
Nội dung mô tả:
Trả về TRUE nếu x nhỏ hơn y, và FALSE nếu ngược lại.
Nếu x và y không so sánh được, hàm sẽ trả về FALSE.
Ví dụ:
x |
y |
less_than(x, y) |
|---|---|---|
| 1L | 0.0 | FALSE |
| 1L | 1L | FALSE |
| 1L | 2L | TRUE |
| "foo" | 0L | FALSE |
| 0L | "foo" | FALSE |
| NaN (Không phải số) | 0L | FALSE |
| 0L | NaN (Không phải số) | 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
Cú pháp:
less_than_or_equal(x: ANY, y: ANY) -> BOOLEAN
Nội dung mô tả:
Trả về TRUE nếu x nhỏ hơn hoặc bằng y, và FALSE nếu ngược lại.
Nếu x và y không so sánh được, hàm sẽ trả về FALSE.
Ví dụ:
x |
y |
less_than(x, y) |
|---|---|---|
| 1L | 0.0 | FALSE |
| 1L | 1L | TRUE |
| 1L | 2L | TRUE |
| "foo" | 0L | FALSE |
| 0L | "foo" | FALSE |
| NaN (Không phải số) | 0L | FALSE |
| 0L | NaN (Không phải số) | 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
Cú pháp:
not_equal(x: ANY, y: ANY) -> BOOLEAN
Nội dung mô tả:
Trả về TRUE nếu x không bằng y, và FALSE nếu ngược lại.
Ví dụ:
x |
y |
not_equal(x, y) |
|---|---|---|
| 1L | 1L | FALSE |
| 1.0 | 1L | FALSE |
| -1 | 1L | TRUE |
| NaN (Không phải số) | 0L | TRUE |
| NaN (Không phải số) | NaN (Không phải số) | 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();
LHT
Cú pháp:
cmp(x: ANY, y: ANY) -> Int64
Nội dung mô tả:
So sánh x và y, trả về:
1Lnếuxlớn hơny.-1Lnếuxnhỏ hơny.- Nếu không thì là
0L.
Không giống như các hàm so sánh khác, hàm cmp(...) hoạt động trên nhiều loại, theo cùng một thứ tự được dùng trong giai đoạn sort(...). Hãy xem thứ tự loại giá trị để biết cách sắp xếp các giá trị theo loại.
Ví dụ:
x |
y |
cmp(x, y) |
|---|---|---|
| 1L | 1L | 0L |
| 1.0 | 1L | 0L |
| -1 | 1L | -1L |
| 42.5D | "foo" | -1L |
NULL |
NULL |
0L |
NULL |
ABSENT |
0L |
Các hàm gỡ lỗi
| Tên | Mô tả |
EXISTS
|
Trả về TRUE nếu giá trị không phải là giá trị vắng mặt
|
IS_ABSENT
|
Trả về TRUE nếu giá trị là một giá trị không có
|
IF_ABSENT
|
Thay thế giá trị bằng một biểu thức nếu giá trị đó không có |
IS_ERROR
|
Nắm bắt và kiểm tra xem biểu thức cơ bản có gây ra lỗi hay không |
IF_ERROR
|
Thay thế giá trị bằng một biểu thức nếu giá trị đó đã trả về lỗi |
ERROR
|
Kết thúc quá trình đánh giá và trả về lỗi kèm theo thông báo đã chỉ định |
EXISTS
Cú pháp:
exists(value: ANY) -> BOOLEAN
Nội dung mô tả:
Trả về TRUE nếu value không phải là giá trị vắng mặt.
Ví dụ:
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
Ví dụ:
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
Ví dụ:
val result = db.pipeline() .collection("books") .select(field("rating").exists().alias("hasRating")) .execute()
Java
Ví dụ:
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
Cú pháp:
is_absent(value: ANY) -> BOOLEAN
Nội dung mô tả:
Trả về TRUE nếu value là giá trị không có và FALSE nếu ngược lại. Giá trị không có là những giá trị bị thiếu trong dữ liệu đầu vào, chẳng hạn như một trường tài liệu bị thiếu.
Ví dụ:
value |
is_absent(value) |
|---|---|
| 0L | FALSE |
| "foo" | FALSE |
NULL |
FALSE |
ABSENT |
TRUE |
IF_ABSENT
Cú pháp:
if_absent(value: ANY, replacement: ANY) -> ANY
Nội dung mô tả:
Nếu value là một giá trị không có, hàm sẽ đánh giá và trả về replacement. Nếu không, hàm này sẽ trả về value.
Ví dụ:
value |
replacement |
if_absent(value, replacement) |
|---|---|---|
| 5L | 0L | 5L |
NULL |
0L | NULL |
ABSENT |
0L | 0L |
IS_ERROR
Cú pháp:
is_error(try: ANY) -> BOOLEAN
Nội dung mô tả:
Trả về TRUE nếu xảy ra lỗi trong quá trình đánh giá try. Nếu không, hàm này sẽ trả về FALSE.
IF_ERROR
Cú pháp:
if_error(try: ANY, catch: ANY) -> ANY
Nội dung mô tả:
Nếu xảy ra lỗi trong quá trình đánh giá try, hàm sẽ đánh giá và trả về replacement. Nếu không, hàm này sẽ trả về giá trị đã phân giải của try.
LỖI
Cú pháp:
error(message: STRING) -> ANY
Nội dung mô tả:
Việc đánh giá hàm error sẽ dẫn đến việc đánh giá quy trình để kết thúc bằng lỗi. message đã cho có trong lỗi.
Ví dụ:
cond |
res |
switch_on(cond, res, error("no condition matched")) |
|---|---|---|
TRUE |
1L | 1L |
FALSE |
1L | ERROR ("no condition matched") |
Hàm tham chiếu
Loại REFERENCE hoạt động như một "con trỏ" đến các tài liệu khác trong cơ sở dữ liệu (hoặc thậm chí là các cơ sở dữ liệu khác). Các hàm sau đây cho phép thao tác với loại này trong quá trình thực thi truy vấn.
| Tên | Mô tả |
COLLECTION_ID
|
Trả về mã nhận dạng của tập hợp lá trong giá trị tham chiếu đã cho |
DOCUMENT_ID
|
Trả về mã nhận dạng của tài liệu trong giá trị tham chiếu đã cho |
PARENT
|
Trả về tham chiếu đến phần tử mẹ |
REFERENCE_SLICE
|
Trả về một tập hợp con các phân đoạn từ giá trị tham chiếu đã cho |
COLLECTION_ID
Cú pháp:
collection_id(ref: REFERENCE) -> STRING
Nội dung mô tả:
Trả về mã nhận dạng tập hợp lá của REFERENCE đã cho.
Ví dụ:
ref |
collection_id(ref) |
|---|---|
users/user1 |
"users" |
users/user1/posts/post1 |
"posts" |
DOCUMENT_ID
Cú pháp:
document_id(ref: REFERENCE) -> ANY
Nội dung mô tả:
Trả về mã tài liệu của REFERENCE đã cho.
Ví dụ:
ref |
document_id(ref) |
|---|---|
users/user1 |
"user1" |
users/user1/posts/post1 |
"post1" |
PARENT
Cú pháp:
parent(ref: REFERENCE) -> REFERENCE
Nội dung mô tả:
Trả về REFERENCE mẹ của giá trị tham chiếu đã cho hoặc NULL nếu ref đã là một giá trị tham chiếu gốc.
Ví dụ:
ref |
parent(ref) |
|---|---|
/ |
NULL |
users/user1 |
/ |
users/user1/posts/post1 |
users/user1 |
REFERENCE_SLICE
Cú pháp:
reference_slice(ref: REFERENCE, offset: INT, length: INT) -> REFERENCE
Nội dung mô tả:
REFERENCE là một danh sách các bộ (collection_id, document_id) và điều này cho phép xem danh sách đó, giống như array_slice(...).
Trả về một REFERENCE mới là một tập hợp con của các phân đoạn trong ref đã cho.
offset: Chỉ mục bắt đầu (bắt đầu từ 0) của lát cắt. Nếu là số âm, thì đó là độ lệch so với cuối tệp đối chiếu.length: Số lượng phân đoạn cần đưa vào lát cắt.
Ví dụ:
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 |
Hàm logic
| Tên | Mô tả |
AND
|
Thực hiện phép toán AND logic |
OR
|
Thực hiện phép toán logic OR |
XOR
|
Thực hiện phép XOR logic |
NOT
|
Thực hiện phép toán logic NOT |
NOR
|
Thực hiện phép toán NOR logic |
CONDITIONAL
|
Đánh giá các nhánh dựa trên một biểu thức có điều kiện. |
IF_NULL
|
Trả về giá trị không rỗng đầu tiên |
SWITCH_ON
|
Đánh giá các nhánh dựa trên một loạt điều kiện |
EQUAL_ANY
|
Kiểm tra xem một giá trị có bằng với bất kỳ phần tử nào trong một mảng hay không |
NOT_EQUAL_ANY
|
Kiểm tra xem một giá trị có bằng với bất kỳ phần tử nào trong một mảng hay không |
MAXIMUM
|
Trả về giá trị lớn nhất trong một tập hợp giá trị |
MINIMUM
|
Trả về giá trị nhỏ nhất trong một tập hợp giá trị |
VÀ
Cú pháp:
and(x: BOOLEAN...) -> BOOLEAN
Nội dung mô tả:
Trả về phép toán AND logic của hai hoặc nhiều giá trị boolean.
Trả về NULL nếu không thể lấy được kết quả do bất kỳ giá trị nào đã cho là ABSENT hoặc NULL.
Ví dụ:
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();
HOẶC
Cú pháp:
or(x: BOOLEAN...) -> BOOLEAN
Nội dung mô tả:
Trả về phép toán OR logic của hai hoặc nhiều giá trị boolean.
Trả về NULL nếu không thể lấy được kết quả do bất kỳ giá trị nào đã cho là ABSENT hoặc NULL.
Ví dụ:
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
Cú pháp:
xor(x: BOOLEAN...) -> BOOLEAN
Nội dung mô tả:
Trả về giá trị logic XOR của hai hoặc nhiều giá trị boolean.
Trả về NULL nếu bất kỳ giá trị nào đã cho là ABSENT hoặc NULL.
Ví dụ:
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
Cú pháp:
nor(x: BOOLEAN...) -> BOOLEAN
Nội dung mô tả:
Trả về giá trị logic NOR của hai hoặc nhiều giá trị boolean.
Trả về NULL nếu không thể lấy được kết quả do bất kỳ giá trị nào đã cho là ABSENT hoặc NULL.
Ví dụ:
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
Cú pháp:
not(x: BOOLEAN) -> BOOLEAN
Nội dung mô tả:
Trả về giá trị logic NOT của một giá trị boolean.
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
Cú pháp:
conditional(condition: BOOLEAN, true_case: ANY, false_case: ANY) -> ANY
Nội dung mô tả:
Đánh giá và trả về true_case nếu condition đánh giá thành TRUE.
Đánh giá và trả về false_case nếu điều kiện chuyển thành FALSE, NULL hoặc giá trị ABSENT.
Ví dụ:
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
Cú pháp:
if_null(expr: ANY, replacement: ANY) -> ANY
Nội dung mô tả:
Trả về expr nếu không phải là NULL, nếu không, hàm sẽ đánh giá và trả về replacement. Biểu thức replacement sẽ không được đánh giá nếu bạn sử dụng expr.
Ví dụ:
expr |
replacement |
if_null(expr, replacement) |
|---|---|---|
| 1L | 2L | 1L |
NULL |
2L | 2L |
ABSENT |
2L | ABSENT |
SWITCH_ON
Cú pháp:
switch_on(cond1: BOOLEAN, res1: ANY, cond2: BOOLEAN, res2: ANY, ..., [default: ANY]) -> ANY
Nội dung mô tả:
Đánh giá một loạt điều kiện và trả về kết quả liên kết với điều kiện TRUE đầu tiên. Nếu không có điều kiện nào đánh giá thành TRUE, thì giá trị default sẽ được trả về nếu bạn cung cấp. Nếu không có giá trị default nào được cung cấp, thì lỗi sẽ xảy ra nếu không có điều kiện nào khác được đánh giá là TRUE.
Để cung cấp giá trị default, hãy truyền giá trị đó làm đối số cuối cùng sao cho có số lượng đối số là số lẻ.
Ví dụ:
x |
switch_on(eq(x, 1L), "one", eq(x, 2L), "two", "other") |
|---|---|
| 1L | "một" |
| 2L | "two" |
| 3L | "other" |
EQUAL_ANY
Cú pháp:
equal_any(value: ANY, search_space: ARRAY) -> BOOLEAN
Nội dung mô tả:
Trả về TRUE nếu value nằm trong mảng search_space.
Ví dụ:
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 (Không phải số) | [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
Cú pháp:
not_equal_any(value: ANY, search_space: ARRAY) -> BOOLEAN
Nội dung mô tả:
Trả về TRUE nếu value không có trong mảng search_space.
Ví dụ:
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 (Không phải số) | [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();
TỐI ĐA
Cú pháp:
maximum(x: ANY...) -> ANY
maximum(x: ARRAY) -> ANY
Nội dung mô tả:
Trả về giá trị lớn nhất không phải NULL, không phải ABSENT trong một chuỗi giá trị x.
Nếu không có giá trị nào khác ngoài NULL và ABSENT, thì hàm sẽ trả về NULL.
Nếu có nhiều giá trị tương đương tối đa, thì hàm có thể trả về bất kỳ giá trị nào trong số đó. Thứ tự loại giá trị tuân theo thứ tự được ghi lại.
Ví dụ:
x |
y |
maximum(x, y) |
|---|---|---|
FALSE |
TRUE |
TRUE |
FALSE |
-10L | -10L |
| 0.0 | -5L | 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();
TỐI THIỂU
Cú pháp:
minimum(x: ANY...) -> ANY
minimum(x: ARRAY) -> ANY
Nội dung mô tả:
Trả về giá trị nhỏ nhất không phải NULL, không phải ABSENT trong một chuỗi giá trị x.
Nếu không có giá trị nào khác ngoài NULL và ABSENT, thì hàm sẽ trả về NULL.
Nếu có nhiều giá trị tương đương tối thiểu, bạn có thể trả về bất kỳ giá trị nào trong số đó. Thứ tự loại giá trị tuân theo thứ tự được ghi lại.
Ví dụ:
x |
y |
minimum(x, y) |
|---|---|---|
FALSE |
TRUE |
FALSE |
FALSE |
-10L | FALSE |
| 0.0 | -5L | -5L |
| "foo" | "bar" | "bar" |
| "foo" | ["foo"] | "foo" |
ABSENT |
ABSENT |
NULL |
NULL |
NULL |
NULL |
Node.js
const result = await execute(db.pipeline() .collection("books") .aggregate(field("price").minimum().as("minimumPrice")) );
Web
const result = await execute(db.pipeline() .collection("books") .aggregate(field("price").minimum().as("minimumPrice")) );
Swift
let result = try await db.pipeline() .collection("books") .select([ Field("rating").logicalMinimum([5]).as("cappedRating") ]) .execute()
Kotlin
val result = db.pipeline() .collection("books") .select( field("rating").logicalMinimum(5).alias("cappedRating") ) .execute()
Java
Task<Pipeline.Snapshot> result = db.pipeline() .collection("books") .select( field("rating").logicalMinimum(5).alias("cappedRating") ) .execute();
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();
Hàm bản đồ
| Tên | Mô tả |
MAP
|
Tạo một giá trị bản đồ từ một loạt các cặp khoá-giá trị |
MAP_GET
|
Trả về giá trị trong một tệp ánh xạ dựa trên khoá được chỉ định |
MAP_SET
|
Trả về bản sao của một bản đồ có một loạt khoá đã cập nhật |
MAP_REMOVE
|
Trả về bản sao của một bản đồ đã xoá một loạt khoá |
MAP_MERGE
|
Hợp nhất một loạt bản đồ với nhau. |
CURRENT_CONTEXT
|
Trả về ngữ cảnh hiện tại dưới dạng bản đồ. |
MAP_KEYS
|
Trả về một mảng gồm tất cả các khoá trong một bản đồ. |
MAP_VALUES
|
Trả về một mảng gồm tất cả các giá trị trong một bản đồ. |
MAP_ENTRIES
|
Trả về một mảng gồm các cặp khoá-giá trị của một bản đồ. |
MAP
Cú pháp:
map(key: STRING, value: ANY, ...) -> MAP
Nội dung mô tả:
Tạo một bản đồ từ một loạt các cặp khoá-giá trị.
MAP_GET
Cú pháp:
map_get(map: ANY, key: STRING) -> ANY
Nội dung mô tả:
Trả về giá trị trong một tệp ánh xạ dựa trên khoá được chỉ định. Trả về giá trị ABSENT nếu key không tồn tại trong tệp ánh xạ hoặc nếu đối số map không phải là 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
Cú pháp:
map_set(map: MAP, key: STRING, value: ANY, ...) -> MAP
Nội dung mô tả:
Trả về bản sao của giá trị map với nội dung được cập nhật bằng một loạt cặp khoá-giá trị.
Nếu giá trị đã cho được phân giải thành một giá trị không có, thì khoá được liên kết sẽ bị xoá khỏi bản đồ.
Nếu đối số map không phải là MAP, hàm sẽ trả về một giá trị vắng mặt.
MAP_REMOVE
Cú pháp:
map_remove(map: MAP, key: STRING...) -> MAP
Nội dung mô tả:
Trả về bản sao của giá trị map sau khi xoá một loạt khoá.
MAP_MERGE
Cú pháp:
map_merge(maps: MAP...) -> MAP
Hợp nhất nội dung của 2 hoặc nhiều bản đồ. Nếu nhiều bản đồ có các giá trị xung đột, thì giá trị cuối cùng sẽ được sử dụng.
CURRENT_CONTEXT
Cú pháp:
current_context() -> MAP
Trả về một bản đồ bao gồm tất cả các trường có sẵn tại thời điểm thực thi hiện tại.
MAP_KEYS
Cú pháp:
map_keys(map: MAP) -> ARRAY<STRING>
Nội dung mô tả:
Trả về một mảng chứa tất cả các khoá của giá trị map.
MAP_VALUES
Cú pháp:
map_values(map: MAP) -> ARRAY<ANY>
Nội dung mô tả:
Trả về một mảng chứa tất cả các giá trị của giá trị map.
MAP_ENTRIES
Cú pháp:
map_entries(map: MAP) -> ARRAY<MAP>
Nội dung mô tả:
Trả về một mảng chứa tất cả các cặp khoá-giá trị trong giá trị map.
Mỗi cặp khoá-giá trị sẽ ở dạng một bản đồ có hai mục, k và v.
Ví dụ:
map |
map_entries(map) |
|---|---|
| {} | [] |
| {"foo" : 2L} | [{"k": "foo", "v" : 2L}] |
| {"foo" : "bar", "bar" : "foo"} | [{"k": "foo", "v" : "bar" }, {"k" : "bar", "v": "foo"}] |
Hàm chuỗi
| Tên | Mô tả |
BYTE_LENGTH
|
Trả về số lượng BYTES trong giá trị STRING hoặc BYTES
|
CHAR_LENGTH
|
Trả về số lượng ký tự Unicode trong giá trị STRING
|
STARTS_WITH
|
Trả về TRUE nếu STRING bắt đầu bằng một tiền tố nhất định
|
ENDS_WITH
|
Trả về TRUE nếu STRING kết thúc bằng một hậu tố nhất định
|
LIKE
|
Trả về TRUE nếu STRING khớp với một mẫu
|
REGEX_CONTAINS
|
Trả về TRUE nếu một giá trị khớp một phần hoặc khớp hoàn toàn với một biểu thức chính quy
|
REGEX_MATCH
|
Trả về TRUE nếu bất kỳ phần nào của giá trị khớp với một biểu thức chính quy
|
STRING_CONCAT
|
Nối nhiều STRING thành một STRING
|
STRING_CONTAINS
|
Trả về TRUE nếu một giá trị chứa STRING
|
STRING_INDEX_OF
|
Trả về chỉ mục (bắt đầu đếm từ 0) của lần xuất hiện đầu tiên của giá trị STRING hoặc BYTES.
|
TO_UPPER
|
Chuyển đổi giá trị STRING hoặc BYTES thành chữ hoa.
|
TO_LOWER
|
Chuyển đổi giá trị STRING hoặc BYTES thành chữ thường.
|
SUBSTRING
|
Lấy một chuỗi con của giá trị STRING hoặc BYTES.
|
STRING_REVERSE
|
Đảo ngược giá trị STRING hoặc BYTES.
|
STRING_REPEAT
|
Lặp lại giá trị STRING hoặc BYTES theo một số lần được chỉ định.
|
STRING_REPLACE_ALL
|
Thay thế tất cả các lần xuất hiện của giá trị STRING hoặc BYTES.
|
STRING_REPLACE_ONE
|
Thay thế lần xuất hiện đầu tiên của giá trị STRING hoặc BYTES.
|
TRIM
|
Cắt bỏ các ký tự đầu và cuối khỏi giá trị STRING hoặc BYTES.
|
LTRIM
|
Cắt bỏ các ký tự ở đầu khỏi giá trị STRING hoặc BYTES.
|
RTRIM
|
Cắt bỏ các ký tự ở cuối giá trị STRING hoặc BYTES.
|
SPLIT
|
Chia giá trị STRING hoặc BYTES thành một mảng.
|
BYTE_LENGTH
Cú pháp:
byte_length[T <: STRING | BYTES](value: T) -> INT64
Nội dung mô tả:
Trả về số lượng BYTES trong giá trị STRING hoặc BYTES.
Ví dụ:
| value | 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
Cú pháp:
char_length(value: STRING) -> INT64
Nội dung mô tả:
Trả về số lượng điểm mã Unicode trong giá trị STRING.
Ví dụ:
| value | char_length(value) |
|---|---|
| "abc" | 3 |
| "xin chào" | 5 |
| "thế giới" | 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
Cú pháp:
starts_with(value: STRING, prefix: STRING) -> BOOLEAN
Nội dung mô tả:
Trả về TRUE nếu value bắt đầu bằng prefix.
Ví dụ:
| value | tiền tố | starts_with(value, prefix) |
|---|---|---|
| "abc" | "a" | đúng |
| "abc" | "b" | false |
| "abc" | "" | đúng |
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
Cú pháp:
ends_with(value: STRING, postfix: STRING) -> BOOLEAN
Nội dung mô tả:
Trả về TRUE nếu value kết thúc bằng postfix.
Ví dụ:
| value | postfix | ends_with(value, postfix) |
|---|---|---|
| "abc" | "c" | đúng |
| "abc" | "b" | false |
| "abc" | "" | đúng |
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();
THÍCH
Cú pháp:
like(value: STRING, pattern: STRING) -> BOOLEAN
Nội dung mô tả:
Trả về TRUE nếu value khớp với pattern.
Ví dụ:
| value | hoa văn | like(value, pattern) |
|---|---|---|
| "Firestore" | "Fire%" | đúng |
| "Firestore" | "%store" | đúng |
| "Datastore" | "Data_tore" | đúng |
| "100%" | "100%" | đúng |
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
Cú pháp:
regex_contains(value: STRING, pattern: STRING) -> BOOLEAN
Nội dung mô tả:
Trả về TRUE nếu một phần của value khớp với pattern. Nếu pattern không phải là một biểu thức chính quy hợp lệ, thì hàm này sẽ trả về error.
Biểu thức chính quy tuân theo cú pháp của thư viện re2.
Ví dụ:
| value | hoa văn | regex_contains(value, pattern) |
|---|---|---|
| "Firestore" | Lửa | đúng |
| "Firestore" | "store$" | đúng |
| "Firestore" | "data" | false |
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
Cú pháp:
regex_match(value: STRING, pattern: STRING) -> BOOLEAN
Nội dung mô tả:
Trả về TRUE nếu value hoàn toàn khớp với pattern. Nếu pattern không phải là một biểu thức chính quy hợp lệ, thì hàm này sẽ trả về error.
Biểu thức chính quy tuân theo cú pháp của thư viện re2.
Ví dụ:
| value | hoa văn | regex_match(value, pattern) |
|---|---|---|
| "Firestore" | "F.*store" | đúng |
| "Firestore" | Lửa | false |
| "Firestore" | "^F.*e$" | đúng |
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
Cú pháp:
string_concat(values: STRING...) -> STRING
Nội dung mô tả:
Nối hai hoặc nhiều giá trị STRING thành một kết quả duy nhất.
Ví dụ:
| đối số | string_concat(values...) |
|---|---|
() |
error |
("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
Cú pháp:
string_contains(value: STRING, substring: STRING) -> BOOLEAN
Nội dung mô tả:
Kiểm tra xem value có chứa chuỗi ký tự substring hay không.
Ví dụ:
| value | chuỗi con | string_contains(value, substring) |
|---|---|---|
| "abc" | "b" | đúng |
| "abc" | "d" | false |
| "abc" | "" | đúng |
| "a.c" | "." | đúng |
| "☃☃☃" | "☃" | đúng |
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
Cú pháp:
string_index_of[T <: STRING | BYTES](value: T, search: T) -> INT64
Nội dung mô tả:
Trả về chỉ mục dựa trên 0 của lần xuất hiện đầu tiên của search trong value.
- Trả về
-1nếu không tìm thấysearch. - Nếu
valuelà giá trịSTRING, thì kết quả sẽ được đo bằng điểm mã unicode. Nếu là giá trịBYTES, thì giá trị này được đo bằng byte. - Nếu
searchlà một giá trịSTRINGhoặcBYTEStrống, kết quả sẽ là0.
Ví dụ:
| value | tìm-kiếm | string_index_of(value, search) |
|---|---|---|
| "hello world" | "o" | 4 |
| "hello world" | "l" | 2 |
| "hello world" | "z" | -1 |
| "chuối" | "na" | 2 |
| "abc" | "" | 0 |
| b"abc" | b"b" | 1 |
| "é" | "é" | 0 |
| b"é" | b"é" | 0 |
TO_UPPER
Cú pháp:
to_upper[T <: STRING | BYTES](value: T) -> T
Nội dung mô tả:
Chuyển đổi giá trị STRING hoặc BYTES thành chữ hoa.
Nếu một byte hoặc ký tự không tương ứng với một ký tự chữ cái viết thường UTF-8, thì byte hoặc ký tự đó sẽ được truyền qua mà không thay đổi.
Ví dụ:
| value | 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();
Hàm TO_LOWER
Cú pháp:
to_lower[T <: STRING | BYTES](value: T) -> T
Nội dung mô tả:
Chuyển đổi giá trị STRING hoặc BYTES thành chữ thường.
Nếu một byte hoặc ký tự không tương ứng với ký tự chữ cái viết hoa UTF-8, thì byte hoặc ký tự đó sẽ được truyền qua mà không thay đổi.
Ví dụ:
| value | 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
Cú pháp:
substring[T <: STRING | BYTES](input: T, position: INT64) -> T
substring[T <: STRING | BYTES](input: T, position: INT64, length: INT64) -> T
Nội dung mô tả:
Trả về một chuỗi con của input, bắt đầu từ position (chỉ mục từ 0) và bao gồm tối đa length mục. Nếu không có length, hãy trả về chuỗi con từ position đến cuối input.
Nếu
inputlà giá trịSTRING, thìpositionvàlengthsẽ được đo bằng điểm mã unicode. Nếu đó là giá trịBYTES, thì các giá trị này được đo bằng byte.Nếu
positionlớn hơn độ dài củainput, thì hàm sẽ trả về một chuỗi con trống. Nếupositioncộng vớilengthlớn hơn độ dài củainput, thì chuỗi con sẽ bị cắt bớt đến cuốiinput.Nếu
positionlà số âm, vị trí sẽ được lấy từ cuối dữ liệu đầu vào. Nếupositionâm lớn hơn kích thước của đầu vào, thì vị trí sẽ được đặt thành 0.lengthkhông được là số âm.
Ví dụ:
Khi bạn không cung cấp length:
| nhập liệu | position | substring(input, position) |
|---|---|---|
| "abc" | 0 | "abc" |
| "abc" | 1 | "bc" |
| "abc" | 3 | "" |
| "abc" | -1 | "c" |
| b"abc" | 1 | b"bc" |
Khi bạn cung cấp length:
| nhập liệu | position | chiều dài | 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
Cú pháp:
string_reverse[T <: STRING | BYTES](input: T) -> T
Nội dung mô tả:
Trả về dữ liệu đầu vào đã cung cấp theo thứ tự đảo ngược.
Các ký tự được phân định bằng điểm mã Unicode khi thông tin đầu vào là STRING và bằng byte khi thông tin đầu vào là giá trị BYTES.
Ví dụ:
| nhập liệu | string_reverse(input) |
|---|---|
| "abc" | "cba" |
| "a🌹b" | "b🌹a" |
| "xin chào" | "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
Cú pháp:
string_repeat[T <: STRING | BYTES](input: T, repetitions: INT64) -> T
Nội dung mô tả:
Trả về input được lặp lại repetitions lần.
repetitionsphải là một số nguyên không âm.- Nếu
repetitionslà0, hàm sẽ trả về một giá trị trống có cùng loại vớiinput. - Nếu kết quả vượt quá kích thước tối đa cho phép (1 MB), thì hệ thống sẽ trả về lỗi.
Ví dụ:
| nhập liệu | số lần lặp lại | string_repeat(input, repetitions) |
|---|---|---|
| "foo" | 3 | "foofoofoo" |
| "foo" | 0 | "" |
| "a " | 3 | "a a a " |
| b"ab" | 2 | b"abab" |
| "é🦆" | 2 | "é🦆é🦆" |
STRING_REPLACE_ALL
Cú pháp:
string_replace_all[T <: STRING | BYTES](input: T, find: T, replacement: T) -> T
Nội dung mô tả:
Thay thế tất cả các lần xuất hiện không trùng lặp của find trong input bằng replacement.
- Các kết quả trùng khớp có phân biệt chữ hoa chữ thường.
- Nếu
findtrống, thì sẽ không có nội dung nào được thay thế.
Ví dụ:
| nhập liệu | tìm | thay thế | 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
Cú pháp:
string_replace_one[T <: STRING | BYTES](input: T, find: T, replacement: T) -> T
Nội dung mô tả:
Thay thế lần xuất hiện đầu tiên của find trong input bằng replacement.
- Các kết quả trùng khớp có phân biệt chữ hoa chữ thường.
- Nếu
findtrống, thì sẽ không có nội dung nào được thay thế.
Ví dụ:
| nhập liệu | tìm | thay thế | string_replace_one(input, find, replacement) |
|---|---|---|---|
| "foobarfoo" | "foo" | "baz" | "bazbarfoo" |
| "é" | "é" | "a" | "a" |
| b"foobar" | b"o" | b"z" | b"fzoobar" |
TRIM
Cú pháp:
trim[T <: STRING | BYTES](input: T, values_to_trim: T) -> T
trim[T <: STRING | BYTES](input: T) -> T
Nội dung mô tả:
Cắt một nhóm BYTES hoặc CHARS đã chỉ định ở đầu và cuối input được cung cấp.
- Nếu không có
values_to_trimnào được cung cấp, hãy cắt bỏ các ký tự khoảng trắng.
Ví dụ:
Khi bạn không cung cấp values_to_trim:
| nhập liệu | 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" |
Khi bạn cung cấp values_to_trim:
| nhập liệu | values_to_trim | trim(input, values_to_trim) |
|---|---|---|
| "abcbfooaacb" | "abc" | "foo" |
| "abcdaabadbac" | "abc" | "daabad" |
| b"C1C2C3" | b"C1" | b"C2C3" |
| b"C1C2" | "foo" | error |
| "foo" | b"C1" | error |
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();
Hàm LTRIM
Cú pháp:
ltrim[T <: STRING | BYTES](value: T, to_trim: T) -> T
ltrim[T <: STRING | BYTES](value: T) -> T
Nội dung mô tả:
Cắt bỏ một tập hợp BYTES hoặc CHARS được chỉ định ở đầu value được cung cấp.
- Nếu bạn không cung cấp
to_trim, thì các ký tự khoảng trắng ở đầu sẽ bị cắt bớt.
Ví dụ:
Khi bạn không cung cấp to_trim:
| value | ltrim(value) |
|---|---|
| " foo " | "foo " |
| "foo" | "foo" |
Khi bạn cung cấp to_trim:
| value | to_trim | ltrim(value, to_trim) |
|---|---|---|
| "aaabc" | "a" | "bc" |
| "abacaba" | "ba" | "caba" |
| "é" | "é" | "" |
RTRIM
Cú pháp:
rtrim[T <: STRING | BYTES](value: T, to_trim: T) -> T
rtrim[T <: STRING | BYTES](value: T) -> T
Nội dung mô tả:
Cắt một nhóm BYTES hoặc CHARS đã chỉ định khỏi phần cuối của value được cung cấp.
- Nếu bạn không cung cấp
to_trim, thì hàm này sẽ cắt bỏ các ký tự khoảng trắng ở cuối.
Ví dụ:
Khi bạn không cung cấp to_trim:
| value | rtrim(value) |
|---|---|
| " foo " | " foo" |
| "foo" | "foo" |
Khi bạn cung cấp to_trim:
| value | to_trim | rtrim(value, to_trim) |
|---|---|---|
| "abccc" | "c" | "ab" |
| "abacaba" | "ba" | "abac" |
| "é" | "é" | "" |
SPLIT
Cú pháp:
split(input: STRING) -> ARRAY<STRING>
split[T <: STRING | BYTES](input: T, delimiter: T) -> ARRAY<T>
Nội dung mô tả:
Chia giá trị STRING hoặc BYTES bằng dấu phân cách.
Đối với
STRING, dấu phân cách mặc định là dấu phẩy,. Dấu phân cách được coi là một chuỗi duy nhất.Đối với
BYTES, bạn phải chỉ định một dấu phân cách.Việc phân tách bằng dấu phân cách trống sẽ tạo ra một mảng điểm mã Unicode cho các giá trị
STRINGvà một mảngBYTEScho các giá trịBYTES.Việc phân chia một
STRINGtrống sẽ trả về mộtARRAYcó mộtSTRINGtrống.
Ví dụ:
Khi bạn không cung cấp delimiter:
| nhập liệu | split(input) |
|---|---|
| "foo,bar,foo" | ["foo", "bar", "foo"] |
| "foo" | ["foo"] |
| ",foo," | ["", "foo", ""] |
| "" | [""] |
| b"C120C2C4" | error |
Khi bạn cung cấp delimiter:
| nhập liệu | dấu phân cách | 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" | error |
Hàm dấu thời gian
| Tên | Mô tả |
CURRENT_TIMESTAMP
|
Tạo một TIMESTAMP tương ứng với thời gian yêu cầu.
|
TIMESTAMP_TRUNC
|
Cắt bớt một TIMESTAMP theo độ chi tiết nhất định.
|
UNIX_MICROS_TO_TIMESTAMP
|
Chuyển đổi số lượng micro giây kể từ 1970-01-01 00:00:00 UTC thành TIMESTAMP
|
UNIX_MILLIS_TO_TIMESTAMP
|
Chuyển đổi số mili giây kể từ 1970-01-01 00:00:00 UTC thành TIMESTAMP
|
UNIX_SECONDS_TO_TIMESTAMP
|
Chuyển đổi số giây kể từ 1970-01-01 00:00:00 UTC thành TIMESTAMP
|
TIMESTAMP_ADD
|
Thêm một khoảng thời gian vào TIMESTAMP
|
TIMESTAMP_SUB
|
Trừ một khoảng thời gian vào TIMESTAMP
|
TIMESTAMP_TO_UNIX_MICROS
|
Chuyển đổi TIMESTAMP thành số vi giây kể từ 1970-01-01 00:00:00 UTC
|
TIMESTAMP_TO_UNIX_MILLIS
|
Chuyển đổi TIMESTAMP thành số mili giây kể từ 1970-01-01 00:00:00 UTC
|
TIMESTAMP_TO_UNIX_SECONDS
|
Chuyển đổi TIMESTAMP thành số giây kể từ 1970-01-01 00:00:00 UTC
|
TIMESTAMP_DIFF
|
Trả về số nguyên của khoảng thời gian unit được chỉ định giữa hai TIMESTAMP.
|
TIMESTAMP_EXTRACT
|
Trích xuất một part cụ thể (ví dụ: năm, tháng, ngày) từ một TIMESTAMP.
|
CURRENT_TIMESTAMP
Cú pháp:
current_timestamp() -> TIMESTAMP
Nội dung mô tả:
Lấy dấu thời gian ở đầu thời gian yêu cầu input (được diễn giải là số lượng vi giây kể từ 1970-01-01 00:00:00 UTC).
Giá trị này ổn định trong một truy vấn và sẽ luôn phân giải thành cùng một giá trị nếu được gọi nhiều lần.
TIMESTAMP_TRUNC
Cú pháp:
timestamp_trunc(timestamp: TIMESTAMP, granularity: STRING[, timezone: STRING]) -> TIMESTAMP
Nội dung mô tả:
Cắt bớt dấu thời gian xuống một mức độ chi tiết nhất định.
Đối số granularity phải là một chuỗi và là một trong những đối số sau:
microsecondmillisecondsecondminutehourdayweekweek([weekday])monthquarteryearisoyear
Nếu bạn cung cấp đối số timezone, thì việc cắt bớt sẽ dựa trên ranh giới lịch của múi giờ đã cho (ví dụ: việc cắt bớt theo ngày sẽ cắt bớt đến nửa đêm theo múi giờ đã cho). Việc cắt bớt sẽ tuân theo giờ mùa hè.
Nếu bạn không cung cấp timezone, thì việc cắt bớt sẽ dựa trên ranh giới lịch UTC.
Đối số timezone phải là một chuỗi biểu diễn múi giờ trong cơ sở dữ liệu tz, ví dụ: America/New_York. Bạn cũng có thể sử dụng mức chênh lệch thời gian tuỳ chỉnh bằng cách chỉ định mức chênh lệch so với GMT.
Ví dụ:
timestamp |
granularity |
timezone |
timestamp_trunc(timestamp, granularity, timezone) |
|---|---|---|---|
| 2000-01-01 10:20:30:123456 UTC | "second" | Không được cung cấp | 2001-01-01 10:20:30 UTC |
| 1997-05-31 04:30:30 UTC | "day" | Không được cung cấp | 1997-05-31 00:00:00 UTC |
| 1997-05-31 04:30:30 UTC | "day" | "America/Los_Angeles" | 1997-05-30 07:00:00 UTC |
| 2001-03-16 04:00:00 UTC | "week(friday) | Không được cung cấp | 2001-03-16 00:00:00 UTC |
| 2001-03-23 04:00:00 UTC | "week(friday) | "America/Los_Angeles" | 2001-03-23 17:00:00 UTC |
| 20:00:00 ngày 24 tháng 1 năm 2026 (giờ UTC) | "tháng" | "GMT+06:32:43" | 2026-01-01T06:32:43 UTC |
UNIX_MICROS_TO_TIMESTAMP
Cú pháp:
unix_micros_to_timestamp(input: INT64) -> TIMESTAMP
Nội dung mô tả:
Chuyển đổi input (được diễn giải là số vi giây kể từ 1970-01-01 00:00:00 UTC) thành TIMESTAMP. Trả về một error nếu input không thể chuyển đổi thành TIMESTAMP hợp lệ.
Ví dụ:
input |
unix_micros_to_timestamp(input) |
|---|---|
| 0L | 1970-01-01 00:00:00 UTC |
| 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
Cú pháp:
unix_millis_to_timestamp(input: INT64) -> TIMESTAMP
Nội dung mô tả:
Chuyển đổi input (được diễn giải là số mili giây kể từ 1970-01-01 00:00:00 UTC) thành TIMESTAMP. Trả về một error nếu input không thể chuyển đổi thành TIMESTAMP hợp lệ.
Ví dụ:
input |
unix_millis_to_timestamp(input) |
|---|---|
| 0L | 1970-01-01 00:00:00 UTC |
| 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
Cú pháp:
unix_seconds_to_timestamp(input: INT64) -> TIMESTAMP
Nội dung mô tả:
Chuyển đổi input (được diễn giải là số giây kể từ 1970-01-01 00:00:00 UTC) thành TIMESTAMP. Trả về một error nếu input không thể chuyển đổi thành TIMESTAMP hợp lệ.
Ví dụ:
input |
unix_seconds_to_timestamp(input) |
|---|---|
| 0L | 1970-01-01 00:00:00 UTC |
| 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
Cú pháp:
timestamp_add(timestamp: TIMESTAMP, unit: STRING, amount: INT64) -> TIMESTAMP
Nội dung mô tả:
Thêm amount bằng unit từ timestamp. Đối số amount có thể là số âm, trong trường hợp đó, đối số này tương đương với TIMESTAMP_SUB.
Đối số unit phải là một chuỗi và là một trong những đối số sau:
microsecondmillisecondsecondminutehourday
Đưa ra lỗi nếu dấu thời gian kết quả không nằm trong phạm vi TIMESTAMP.
Ví dụ:
timestamp |
unit |
amount |
timestamp_add(timestamp, unit, amount) |
|---|---|---|---|
| 2025-02-20 00:00:00 UTC | "phút" | 2L | 2025-02-20 00:02:00 UTC |
| 2025-02-20 00:00:00 UTC | "giờ" | -4L | 20:00:00 ngày 19 tháng 2 năm 2025 (giờ UTC) |
| 2025-02-20 00:00:00 UTC | "day" | 5L | 00:00:00 ngày 25 tháng 2 năm 2025 (giờ UTC) |
Node.js
const result = await db.pipeline() .collection("documents") .select( field("createdAt").timestampAdd("day", 3653).as("expiresAt") ) .execute();
Web
const result = await execute(db.pipeline() .collection("documents") .select( field("createdAt").timestampAdd("day", 3653).as("expiresAt") ) );
Swift
let result = try await db.pipeline() .collection("documents") .select([ Field("createdAt").timestampAdd(3653, .day).as("expiresAt") ]) .execute()
Kotlin
val result = db.pipeline() .collection("documents") .select( field("createdAt") .timestampAdd("day", 3653) .alias("expiresAt") ) .execute()
Java
Task<Pipeline.Snapshot> result = db.pipeline() .collection("documents") .select( field("createdAt").timestampAdd("day", 3653).alias("expiresAt") ) .execute();
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
Cú pháp:
timestamp_sub(timestamp: TIMESTAMP, unit: STRING, amount: INT64) -> TIMESTAMP
Nội dung mô tả:
Trừ amount của unit khỏi timestamp. Đối số amount có thể là số âm, trong trường hợp đó, đối số này tương đương với TIMESTAMP_ADD.
Đối số unit phải là một chuỗi và là một trong những đối số sau:
microsecondmillisecondsecondminutehourday
Đưa ra lỗi nếu dấu thời gian kết quả không nằm trong phạm vi TIMESTAMP.
Ví dụ:
timestamp |
unit |
amount |
timestamp_sub(timestamp, unit, amount) |
|---|---|---|---|
| 00:00, ngày 4 tháng 7 năm 2026, giờ UTC | "phút" | 40L | 2026-07-03 23:20:00 UTC |
| 00:00, ngày 4 tháng 7 năm 2026, giờ UTC | "giờ" | -24L | 00:00:00 ngày 5 tháng 7 năm 2026 theo giờ UTC |
| 00:00, ngày 4 tháng 7 năm 2026, giờ UTC | "day" | 3L | 00:00:00 ngày 1 tháng 7 năm 2026 theo giờ UTC |
Node.js
const result = await db.pipeline() .collection("documents") .select( field("expiresAt").timestampSubtract("day", 14).as("sendWarningTimestamp") ) .execute();
Web
const result = await execute(db.pipeline() .collection("documents") .select( field("expiresAt").timestampSubtract("day", 14).as("sendWarningTimestamp") ) );
Swift
let result = try await db.pipeline() .collection("documents") .select([ Field("expiresAt").timestampSubtract(14, .day).as("sendWarningTimestamp") ]) .execute()
Kotlin
val result = db.pipeline() .collection("documents") .select( field("expiresAt") .timestampSubtract("day", 14) .alias("sendWarningTimestamp") ) .execute()
Java
Task<Pipeline.Snapshot> result = db.pipeline() .collection("documents") .select( field("expiresAt").timestampSubtract("day", 14).alias("sendWarningTimestamp") ) .execute();
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
Cú pháp:
timestamp_to_unix_micros(input: TIMESTAMP) -> INT64
Nội dung mô tả:
Chuyển đổi input thành số lượng micrô giây kể từ 1970-01-01 00:00:00 UTC. Cắt bớt các mức độ chính xác cao hơn bằng cách làm tròn xuống đầu của vi giây.
Ví dụ:
input |
timestamp_to_unix_micros(input) |
|---|---|
| 1970-01-01 00:00:00 UTC | 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
Cú pháp:
timestamp_to_unix_millis(input: TIMESTAMP) -> INT64
Nội dung mô tả:
Chuyển đổi input thành số mili giây kể từ 1970-01-01 00:00:00 UTC. Cắt bớt các mức độ chính xác cao hơn bằng cách làm tròn xuống đến đầu của mili giây.
Ví dụ:
input |
timestamp_to_unix_millis(input) |
|---|---|
| 1970-01-01 00:00:00 UTC | 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
Cú pháp:
timestamp_to_unix_seconds(input: TIMESTAMP) -> INT64
Nội dung mô tả:
Chuyển đổi input thành số giây kể từ 1970-01-01 00:00:00 UTC. Cắt bớt các mức độ chính xác cao hơn bằng cách làm tròn xuống đầu giây.
Ví dụ:
input |
timestamp_to_unix_seconds(input) |
|---|---|
| 1970-01-01 00:00:00 UTC | 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
Cú pháp:
timestamp_diff(end: TIMESTAMP, start: TIMESTAMP, unit: STRING) -> INT64
Nội dung mô tả:
Trả về số nguyên của khoảng thời gian unit được chỉ định giữa hai TIMESTAMP.
- Trả về giá trị âm nếu
endđứng trướcstart. - Cắt bớt mọi đơn vị phân số. Ví dụ:
timestamp_diff("2021-01-01 00:00:01", "2021-01-01 00:00:00", "minute")trả về0.
Đối số unit phải là một chuỗi và là một trong những đối số sau:
microsecondmillisecondsecondminutehourday
Ví dụ:
end |
start |
unit |
timestamp_diff(end, start, unit) |
|---|---|---|---|
| 00:01:00 ngày 4 tháng 7 năm 2026 theo giờ UTC | 00:00, ngày 4 tháng 7 năm 2026, giờ UTC | "second" | 60L |
| 00:00, ngày 4 tháng 7 năm 2026, giờ UTC | 00:00:00 ngày 5 tháng 7 năm 2026 theo giờ UTC | "day" | -1L |
| 00:00:59 ngày 4 tháng 7 năm 2026 (giờ UTC) | 00:00, ngày 4 tháng 7 năm 2026, giờ UTC | "phút" | 0L |
TIMESTAMP_EXTRACT
Cú pháp:
timestamp_extract(timestamp: TIMESTAMP, part: STRING[, timezone: STRING]) -> INT64
Nội dung mô tả:
Trích xuất một part cụ thể (ví dụ: năm, tháng, ngày) từ timestamp.
Đối số part phải là một chuỗi và là một trong những đối số sau:
microsecondmillisecondsecondminutehourdaydayofweek: Trả về một giá trị từ 1 (Chủ Nhật) đến 7 (Thứ Bảy).dayofyearweek: Trả về số tuần của năm, bắt đầu từ 1 cho ngày Chủ Nhật đầu tiên của năm.week([weekday]): Trả về số tuần trong năm, bắt đầu từweekdayđược chỉ định.monthquarteryearisoweek: Trả về số tuần theo tiêu chuẩn ISO 8601.isoyear: Trả về năm đánh số tuần theo tiêu chuẩn ISO 8601.
Nếu bạn cung cấp đối số timezone, thì quá trình trích xuất sẽ dựa trên lịch của múi giờ đã cho. Hoạt động trích xuất sẽ tuân thủ giờ mùa hè.
Nếu bạn không cung cấp timezone, thì quá trình trích xuất sẽ dựa trên UTC.
Đối số timezone phải là một chuỗi thể hiện múi giờ trong cơ sở dữ liệu múi giờ, ví dụ: America/New_York. Bạn cũng có thể sử dụng độ lệch thời gian tuỳ chỉnh bằng cách chỉ định độ lệch so với GMT.
Ví dụ:
timestamp |
part |
timezone |
timestamp_extract(timestamp, part, timezone) |
|---|---|---|---|
| 2025-02-20 10:20:30 UTC | "year" | Không được cung cấp | 2025 |
| 2025-02-20 10:20:30 UTC | "day" | Không được cung cấp | 20 |
| 23:59:59 ngày 31 tháng 12 năm 2025 (giờ UTC) | "year" | "Asia/Tokyo" | 2026 |
Hàm kiểu
| Tên | Mô tả |
TYPE
|
Trả về loại giá trị dưới dạng STRING.
|
IS_TYPE
|
Trả về true nếu giá trị khớp với loại được chỉ định.
|
LOẠI
Cú pháp:
type(input: ANY) -> STRING
Nội dung mô tả:
Trả về một chuỗi đại diện của loại input.
Nếu được cung cấp một giá trị không có, hàm sẽ trả về NULL.
Ví dụ:
input |
type(input) |
|---|---|
| NULL | "null" |
| đúng | "boolean" |
| 1 | "int32" |
| -3L | "int64" |
| 3,14 | "float64" |
| 2024-01-01T00:00:00Z UTC | "timestamp" |
| "foo" | "string" |
| b"foo" | "bytes" |
| [1, 2] | "array" |
| {"a": 1} | "map" |
path("c/d") |
"reference" |
vector([1.0, 2.0]) |
"vector" |
| ABSENT | NULL |
Ví dụ về khách hàng
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
Cú pháp:
is_type(input: ANY, type: STRING) -> BOOLEAN
Nội dung mô tả:
Trả về true nếu input khớp với type đã chỉ định, nếu không thì trả về false.
Nếu được cung cấp một input không có, hàm sẽ trả về NULL.
Các chuỗi type được hỗ trợ là:
"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"
Ví dụ:
input |
type |
is_type(input, type) |
|---|---|---|
| NULL | "null" | đúng |
| đúng | "boolean" | đúng |
| 3,14 | "float64" | đúng |
| "foo" | "string" | đúng |
| b"foo" | "string" | false |
| [1, 2] | "array" | đúng |
| {"a": 1} | "map" | đúng |
vector([1.0, 2.0]) |
"vector" | đúng |
| ABSENT | "string" | NULL |
| "bar" | "other" | LỖI |
Hàm vectơ
| Tên | Mô tả |
COSINE_DISTANCE
|
Trả về khoảng cách cosine giữa hai vectơ |
DOT_PRODUCT
|
Trả về tích vô hướng giữa hai vectơ |
EUCLIDEAN_DISTANCE
|
Trả về khoảng cách euclid giữa hai vectơ |
MANHATTAN_DISTANCE
|
Trả về khoảng cách Manhattan giữa hai vectơ |
VECTOR_LENGTH
|
Trả về số lượng phần tử trong một vectơ |
COSINE_DISTANCE
Cú pháp:
cosine_distance(x: VECTOR, y: VECTOR) -> FLOAT64
Nội dung mô tả:
Trả về khoảng cách cosin giữa x và 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
Cú pháp:
dot_product(x: VECTOR, y: VECTOR) -> FLOAT64
Nội dung mô tả:
Trả về tích vô hướng của x và 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
Cú pháp:
euclidean_distance(x: VECTOR, y: VECTOR) -> FLOAT64
Nội dung mô tả:
Tính khoảng cách euclid giữa x và 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
Cú pháp:
manhattan_distance(x: VECTOR, y: VECTOR) -> FLOAT64
Nội dung mô tả:
Tính khoảng cách Manhattan giữa x và y.
VECTOR_LENGTH
Cú pháp:
vector_length(vector: VECTOR) -> INT64
Nội dung mô tả:
Trả về số lượng phần tử trong một 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();