在所有字段上进行环回搜索

时间:2018-06-29 12:41:03

标签: javascript json postgresql loopbackjs

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

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

id, name, title, created, updated

现在说我想使用以下字符串“ nomad”在表中进行搜索

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

我尝试过:

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

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

那我该怎么做呢? :)

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

4 个答案:

答案 0 :(得分:5)

环回不是您需要查看的地方。这只是一个具有通用ORM / ODM的框架,可以连接到您的数据库并使用查询语言来公开其余信息。在您的情况下,您可能需要在Postgresql数据库中添加一个text索引。通过将所有所需的属性索引到文本索引中,您将可以在数据库中执行搜索。

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

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

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

但是您的数据库将在少数查询中死亡...

答案 1 :(得分:3)

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

示例

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

答案 2 :(得分:1)

您可以尝试使用 RegExp

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

我已经在查找中使用汇总搜索

示例:

 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);
  });

答案 3 :(得分:1)

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

例如:

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

{where: {property: value}} 

您可以从Loopback Querying dataLoopback Where filterpostgresql RETURN QUERY中发现更多内容。