【问题标题】:How dynamic add an array of functions to an javascript function?如何动态地将函数数组添加到 javascript 函数中?
【发布时间】:2020-04-29 18:22:16
【问题描述】:

我确实有这个结构:

db.collection('users')

并且想做这个:

db.collection('users')
   .where('works', 'array-contains', 'CASE_A')
   .where('works', 'array-contains', 'CASE_B')
   .where('works', 'array-contains', 'CASE_C')
   ...

在这种情况下,我将创建一个数组
(( .where('works', 'array-contains',${variable}))

我会在开头添加这个 db.collection('users'),我该怎么做呢?

【问题讨论】:

  • 我觉得你可以使用Javascript eval函数和数组join函数。
  • 如果您想编写一个包含所有案例的查询,您必须为每个案例创建一个单独的查询并在您的应用程序中合并查询结果。以下article 解释了如何做到这一点(免责声明,我是作者)。

标签: javascript arrays firebase google-cloud-firestore


【解决方案1】:

只需创建一个内联数组:

db.collection('users')
   .where('works', 'array-contains', ['CASE_A', 'CASE_B', 'CASE_C'])

如果需要,也可以使用变量:

const array = ['CASE_A', 'CASE_B', 'CASE_C']
db.collection('users')
   .where('works', 'array-contains', array)

如果您确实想查找存在 所有 个案例的文档(而不是存在 任何 个案例的文档),您将无法使用数组- 包含类型查询。您必须将数组转换为对象并查询它,如以下问题所示:Firestore: Multiple 'array-contains'

【讨论】:

  • 这会返回一个包含所有案例的查询吗?我想要所有案例都匹配的文件。
  • 不,这将对每个项目进行逻辑或。您不能对每个项目进行逻辑与,因为 Firestore 不支持单个查询中的多个数组包含子句。如果您想使用对象而不是数组,请使用:stackoverflow.com/questions/52837711/…
【解决方案2】:

请试试这个代码。

const makeItem = value => `.where('works', 'array-contains',${value}`

const arrFuncs = [
    makeItem('CASE_A'),
    makeItem('CASE_B'),
    makeItem('CASE_C'),
]

const initialCmd = `db.collection('users')`
eval(initialCmd + arrFuncs.join(''))

【讨论】:

    猜你喜欢
    • 2021-02-20
    • 2021-10-28
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多