gpt4 book ai didi

couchbase - 传递给查询的多个未知数量的字段

转载 作者:行者123 更新时间:2023-12-01 05:00:25 24 4
gpt4 key购买 nike

是否可以创建适用于不同类型文档的通用查询?例如我有“案例”和“工厂”,
他们有不同的字段集。例如:

{
id: 'case_o1',
name: 'Case numero uno',
amount: 40
}

{
id: 'factory_002',
location: 'Venezuela',
workers: 200,
operating: true
}

是否可以创建一个通用查询,我将在其中传递实体的类型(案例或工厂)和其他参数,并根据这些来过滤结果?
我当然可以使用 javascript View ,但它不允许我按多个字段进行过滤。假设我想获取位于委内瑞拉的所有工厂, worker 数量在 20 到 55 之间。

我从这个开始,但后来我卡住了:
select * from `mybucket` as entity
where position(meta(entity).id, $entity_type) == 0

如何传递多个谓词并让查询识别它们?

我当然可以列出这样的字段:
where position(meta(entity).id, $entity_type) == 0  
and entity.location == 'Venezuela'
and entity.workers > $workers_min
and entity.workers < $workers_max

但是之后
  • 我将不得不为每个实体创建一个单独的查询
  • 即便如此它也不能解决我的问题 - 我不知道如何忽略谓词,如果下一次 $workers_min 和 $workers_max 没有通过,这是否意味着我必须为每个谓词(列)创建一个查询?
  • 出于安全原因,我无法生成自由格式的查询并将它们传递给 Couchbase 服务器,所有查询都已经存储在数据库中,我们的 api 只是从文档中提取它们并执行它们
  • 我认为可以为未定义的参数创建一个“短路”的查询(例如 WHERE $location IS MISSING OR entity.location == $location 或类似的东西)

  • 是否有可能创建一个能够基于任意参数有效过滤和排序数据集的查询?还是没有办法?

    最佳答案

    @阿扎姆。对不起。你说的时候我正在写我的评论。但无论如何。您可以通过在不太复杂的表达式中使用合并来实现您的要求,但这是一个非常糟糕的主意,因为这将彻底破坏大多数内部数据库优化。包括使用任何现有索引。因此,除非您正在处理一个相对较小的数据库(并且您确定它会保持大致相同的大小),否则我建议您最好尝试不同的方法……事实上,这就是我实现 sqlapi 的原因。

    如果您需要将所有查询以前存储在数据库中,那么按名称对给定参数进行排序并为每个可能的组合预先计算和存储预先计算的查询可能会更好。

    关于couchbase - 传递给查询的多个未知数量的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33443522/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com