对所有字段进行环回搜索

Loopback search on all fields

我正在使用 loopback 作为后端,现在我希望能够搜索 table

中的所有字段

例如,采用以下 table 个字段:

id, name, title, created, updated

现在假设我想使用以下字符串“nomad

在 table 中搜索

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

我尝试过:

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

然而,这只是returns所有结果

那我该怎么做呢? :)

如果重要我的数据库是 postgresql

您可以尝试使用 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);
  });

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

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

您仍然可以通过类似

的方式使用环回 ORM 来实现您的目标

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

但是您的数据库会在很少的查询中死掉...

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

示例

Fields: [id, name, title, created, updated]

let whereCondition = {id: {regexp: '/nomad/i'}, name: {regexp: '/nomad/i'}}

app.models.ModelName.find({
  where: whereCondition
});

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

您将需要获得一个查询函数,该函数将横穿您的数据库并 return 从 table 返回您的数据。

例如:

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

{where: {property: value}} 

您可以从 Loopback Querying data, Loopback Where filter and postgresql RETURN QUERY 中发现更多信息。