פונקציות לוגיות

פונקציות לוגיות

שם תיאור
AND מבצעת פעולת AND לוגית
OR מבצעת פעולת OR לוגית
XOR מבצעת XOR לוגי
NOT מבצעת שלילה לוגית
CONDITIONAL הערכת ענפים על סמך ביטוי מותנה.
EQUAL_ANY הפונקציה בודקת אם ערך מסוים שווה לאחד מהרכיבים במערך
NOT_EQUAL_ANY בודקת אם ערך מסוים לא שווה לאף אחד מהרכיבים במערך
MAXIMUM מחזירה את הערך המקסימלי בקבוצת ערכים
MINIMUM מחזירה את הערך המינימלי בקבוצת ערכים.

וגם

תחביר:

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

תיאור:

מחזירה את הערך הלוגי AND של שני ערכים בוליאניים או יותר.

הפונקציה מחזירה NULL אם אי אפשר להפיק את התוצאה כי אחד מהערכים שצוינו הוא ABSENT או NULL.

לדוגמה:

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

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()
)

או

תחביר:

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

תיאור:

מחזירה את הערך הלוגי OR של שני ערכים בוליאניים או יותר.

הפונקציה מחזירה NULL אם אי אפשר להפיק את התוצאה כי אחד מהערכים שצוינו הוא ABSENT או NULL.

לדוגמה:

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

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()
)

XOR

תחביר:

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

תיאור:

הפונקציה מחזירה את הערך הלוגי XOR של שני ערכים בוליאניים או יותר.

הפונקציה מחזירה NULL אם אחד מהערכים שצוינו הוא ABSENT או NULL.

לדוגמה:

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

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()
)

NOT

תחביר:

not(x: BOOLEAN) -> BOOLEAN

תיאור:

מחזירה את הערך הלוגי NOT של ערך בוליאני.

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()
)

CONDITIONAL

תחביר:

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

תיאור:

הפונקציה בוחנת את condition ומחזירה את הערך true_case אם התוצאה של condition היא TRUE.

הפונקציה בודקת את התנאי ומחזירה את הערך false_case אם התנאי הוא FALSE, NULL או ABSENT.

לדוגמה:

condition true_case false_case conditional(condition, true_case, false_case)
TRUE ‫1L 0L ‫1L
FALSE ‫1L 0L 0L
NULL ‫1L 0L 0L
ABSENT ‫1L 0L 0L

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()
)

EQUAL_ANY

תחביר:

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

תיאור:

הפונקציה מחזירה TRUE אם value נמצא במערך search_space.

לדוגמה:

value search_space equal_any(value, search_space)
0L ‫[1L, ‏ 2L, ‏ 3L] FALSE
‫2L ‫[1L, ‏ 2L, ‏ 3L] TRUE
NULL ‫[1L, ‏ 2L, ‏ 3L] FALSE
NULL ‫[1L, NULL] TRUE
ABSENT ‫[1L, NULL] FALSE
NaN [1L, NaN, 3L] TRUE

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()
)

NOT_EQUAL_ANY

תחביר:

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

תיאור:

הפונקציה מחזירה TRUE אם value לא נמצא במערך search_space.

לדוגמה:

value search_space not_equal_any(value, search_space)
0L ‫[1L, ‏ 2L, ‏ 3L] TRUE
‫2L ‫[1L, ‏ 2L, ‏ 3L] FALSE
NULL ‫[1L, ‏ 2L, ‏ 3L] TRUE
NULL ‫[1L, NULL] FALSE
ABSENT ‫[1L, NULL] TRUE
NaN [1L, NaN, 3L] FALSE

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()
)

מקסימום

תחביר:

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

תיאור:

מחזירה את הערך המקסימלי שאינו NULL ואינו ABSENT בסדרת הערכים x.

אם אין ערכים שהם לא NULL ולא ABSENT, הפונקציה מחזירה NULL.

אם יש כמה ערכים מקסימליים שווים, הפונקציה יכולה להחזיר כל אחד מהם. סדר סוגי הערכים הוא לפי הסדר שמופיע במסמכים.

לדוגמה:

x y maximum(x, y)
FALSE TRUE TRUE
FALSE ‫‎-10L ‫‎-10L
0.0 ‎-5L 0.0
‪"foo" "bar" ‪"foo"
‪"foo" ‪["foo"] ‪["foo"]
ABSENT ABSENT NULL
NULL NULL NULL

Web

const result = await execute(db.pipeline()
  .collection("books")
  .aggregate(field("price").maximum().as("maximumPrice"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .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()
)

MINIMUM

תחביר:

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

תיאור:

מחזירה את הערך המינימלי שאינו NULL ואינו ABSENT בסדרת הערכים x.

אם אין ערכים שהם לא NULL ולא ABSENT, הפונקציה מחזירה NULL.

אם יש כמה ערכים מינימליים שווים, אפשר להחזיר כל אחד מהם. סדר סוגי הערכים הוא לפי הסדר שמופיע במסמכים.

לדוגמה:

x y minimum(x, y)
FALSE TRUE FALSE
FALSE ‫‎-10L FALSE
0.0 ‎-5L ‎-5L
‪"foo" "bar" "bar"
‪"foo" ‪["foo"] ‪"foo"
ABSENT ABSENT NULL
NULL NULL NULL

Web

const result = await execute(db.pipeline()
  .collection("books")
  .aggregate(field("price").minimum().as("minimumPrice"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .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()
)