【问题标题】:Loopback search on all fields对所有字段进行环回搜索
【发布时间】:2018-12-08 15:57:34
【问题描述】:

我现在使用loopback 作为后端我希望能够搜索表中的所有字段

例如,采用以下表格字段:

id, name, title, created, updated

现在说我想使用以下字符串“nomad”搜索整个表格

但是,我不确定如何构造查询

我已经尝试过:

{"where": {"keywords": {"inq": ["nomad"]}}}

但是,这只是返回所有结果

那么我该怎么做呢? :)

如果重要的话,我的数据库是postgresql

【问题讨论】:

  • 你能告诉我们更多关于这个应用程序的信息吗?有角度吗?如果是这样,会有一些差异
  • @JordanHendrix 你好,是的,该应用程序是一个角度应用程序,但我没有使用环回角度。 Loopback 用作我的后端 api,所以对它的调用应该是相当“正常的”
  • 到目前为止运气好吗?

标签: javascript json postgresql loopbackjs


【解决方案1】:

您可以尝试使用 RegExp

 let searchField = "nomad";
 var search = new RegExp(searchField, 'i');
{"where": {"id":search,"name" : search}

我在 LookUp 中使用 AggregateSearch

例子:

 let searchField = "anyname";
     var searchCond = [];
         if (searchField) {
                        var search = new RegExp(searchField, 'i');
                        searchCond.push({ "id": search },{ "name": search });
                    }

//根据您在聚合中添加的其他条件:

    var modelCollection = Model.getDataSource().connector.collection(Model.modelName);
    modelCollection.aggregate([{
                        $match: {
                            $or: searchCond
                        }
                    }], function(err, data) {
    if (err) return callback(err);
    return callback(null, data);
  });

【讨论】:

    【解决方案2】:

    环回不是您需要查看的地方。它只是一个具有通用 ORM / ODM 的框架,用于连接到您的数据库并公开使用查询语言而不是休息。您可能需要在您的 postgresql 数据库中添加 text 索引。通过将所有需要的属性索引到文本索引中,您将能够在数据库中执行搜索。

    这是文档。 https://www.postgresql.org/docs/9.5/static/textsearch.html

    您仍然可以使用类似的环回 ORM 来实现您的目标

    {"where": {"prop1": {"regex": "nomad"}, "prop2": {"regex": "nomad"}}}

    但是您的数据库会在几个查询中死掉...

    【讨论】:

      【解决方案3】:

      您可以使用 loopback 的不区分大小写的正则表达式在数据库中搜索值。

      示例

      Fields: [id, name, title, created, updated]
      
      let whereCondition = {id: {regexp: '/nomad/i'}, name: {regexp: '/nomad/i'}}
      
      app.models.ModelName.find({
        where: whereCondition
      });
      

      请参阅下面的环回文档网址: https://loopback.io/doc/en/lb2/Where-filter.html#regular-expressions

      【讨论】:

        【解决方案4】:

        您需要获取一个查询函数,该函数将遍历您的数据库并从表中返回您的数据。

        例如:

        Account.find({where: {name: 'John'}, limit: 3}, function(err, accounts) { /* ... */ });
        

        或者

        {where: {property: value}} 
        

        您可以通过Loopback Querying dataLoopback Where filterpostgresql RETURN QUERY 了解更多信息。

        【讨论】:

          猜你喜欢
          • 2021-01-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-04
          • 2015-12-14
          • 2015-04-13
          相关资源
          最近更新 更多