توابع منطقی

توابع منطقی

نام توضیحات
AND یک AND منطقی انجام می‌دهد
OR یک OR منطقی انجام می‌دهد
XOR یک XOR منطقی انجام می‌دهد
NOT یک NOT منطقی انجام می‌دهد.
CONDITIONAL ارزیابی شاخه‌ها بر اساس یک عبارت شرطی.
EQUAL_ANY بررسی می‌کند که آیا یک مقدار با هر عنصری در یک آرایه برابر است یا خیر.
NOT_EQUAL_ANY بررسی می‌کند که آیا یک مقدار با هیچ یک از عناصر آرایه برابر نیست یا خیر.
MAXIMUM حداکثر مقدار را در مجموعه‌ای از مقادیر برمی‌گرداند
MINIMUM کمترین مقدار را در مجموعه‌ای از مقادیر برمی‌گرداند

و

نحو:

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

شرح:

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

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

مثال‌ها:

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

Web

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

Kotlin

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

Java

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

result = (
    client.pipeline()
    .collection("books")
    .select(
        And(
            Field.of("rating").greater_than(4), Field.of("price").less_than(10)
        ).as_("under10Recommendation")
    )
    .execute()
)

یا

نحو:

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

شرح:

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

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

مثال‌ها:

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

Web

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

Kotlin

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

Java

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

result = (
    client.pipeline()
    .collection("books")
    .select(
        Or(
            Field.of("genre").equal("Fantasy"),
            Field.of("tags").array_contains("adventure"),
        ).as_("matchesSearchFilters")
    )
    .execute()
)

XOR

نحو:

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

شرح:

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

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

مثال‌ها:

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

Web

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

Kotlin

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

Java

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

result = (
    client.pipeline()
    .collection("books")
    .select(
        Xor(
            [
                Field.of("tags").array_contains("magic"),
                Field.of("tags").array_contains("nonfiction"),
            ]
        ).as_("matchesSearchFilters")
    )
    .execute()
)

نه

نحو:

not(x: BOOLEAN) -> BOOLEAN

شرح:

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

Web

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

Kotlin

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

Java

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

result = (
    client.pipeline()
    .collection("books")
    .select(Not(Field.of("tags").array_contains("nonfiction")).as_("isFiction"))
    .execute()
)

مشروط

نحو:

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

شرح:

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

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

مثال‌ها:

condition true_case false_case conditional(condition, true_case, false_case)
TRUE ۱ لیتر 0 لیتر ۱ لیتر
FALSE ۱ لیتر 0 لیتر 0 لیتر
NULL ۱ لیتر 0 لیتر 0 لیتر
ABSENT ۱ لیتر 0 لیتر 0 لیتر

Web

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

Kotlin

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

Java

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

result = (
    client.pipeline()
    .collection("books")
    .select(
        Field.of("tags")
        .array_concat(
            Conditional(
                Field.of("pages").greater_than(100),
                Constant.of("longRead"),
                Constant.of("shortRead"),
            )
        )
        .as_("extendedTags")
    )
    .execute()
)

مساوی_هر

نحو:

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

شرح:

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

مثال‌ها:

value search_space equal_any(value, search_space)
0 لیتر [۱ لیتر، ۲ لیتر، ۳ لیتر] FALSE
۲ لیتر [۱ لیتر، ۲ لیتر، ۳ لیتر] TRUE
NULL [۱ لیتر، ۲ لیتر، ۳ لیتر] FALSE
NULL [1L، NULL ] TRUE
ABSENT [1L، NULL ] FALSE
نان ن [1 لیتر، NaN، 3 لیتر] TRUE

Web

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

Kotlin

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

Java

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

result = (
    client.pipeline()
    .collection("books")
    .select(
        Field.of("genre")
        .equal_any(["Science Fiction", "Psychological Thriller"])
        .as_("matchesGenreFilters")
    )
    .execute()
)

برابر نیست

نحو:

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

شرح:

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

مثال‌ها:

value search_space not_equal_any(value, search_space)
0 لیتر [۱ لیتر، ۲ لیتر، ۳ لیتر] TRUE
۲ لیتر [۱ لیتر، ۲ لیتر، ۳ لیتر] FALSE
NULL [۱ لیتر، ۲ لیتر، ۳ لیتر] TRUE
NULL [1L، NULL ] FALSE
ABSENT [1L، NULL ] TRUE
نان ن [1 لیتر، NaN، 3 لیتر] FALSE

Web

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

Kotlin

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

Java

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

result = (
    client.pipeline()
    .collection("books")
    .select(
        Field.of("author")
        .not_equal_any(["George Orwell", "F. Scott Fitzgerald"])
        .as_("byExcludedAuthors")
    )
    .execute()
)

حداکثر

نحو:

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

شرح:

حداکثر مقدار غیر NULL و غیر ABSENT را در یک سری از مقادیر x برمی‌گرداند.

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

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

مثال‌ها:

x y maximum(x, y)
FALSE TRUE TRUE
FALSE -10 لیتر -10 لیتر
۰.۰ -5 لیتر ۰.۰
"فو" "بار" "فو"
"فو" ["غذا"] ["غذا"]
ABSENT ABSENT NULL
NULL NULL NULL

Web

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

Kotlin

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

Java

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

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("rating").logical_maximum(1).as_("flooredRating"))
    .execute()
)

حداقل

نحو:

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

شرح:

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

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

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

مثال‌ها:

x y minimum(x, y)
FALSE TRUE FALSE
FALSE -10 لیتر FALSE
۰.۰ -5 لیتر -5 لیتر
"فو" "بار" "بار"
"فو" ["غذا"] "فو"
ABSENT ABSENT NULL
NULL NULL NULL

Web

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

Kotlin

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

Java

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

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("rating").logical_minimum(5).as_("cappedRating"))
    .execute()
)