对所有字段进行环回搜索
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 中使用 Aggregate 到 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);
});
环回不是您需要查看的地方。它只是一个具有通用 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 中发现更多信息。
我正在使用 loopback
作为后端,现在我希望能够搜索 table
例如,采用以下 table 个字段:
id, name, title, created, updated
现在假设我想使用以下字符串“nomad
”
但是,我不确定如何构造查询
我尝试过:
{"where": {"keywords": {"inq": ["nomad"]}}}
然而,这只是returns所有结果
那我该怎么做呢? :)
如果重要我的数据库是 postgresql
您可以尝试使用 RegExp :
let searchField = "nomad";
var search = new RegExp(searchField, 'i');
{"where": {"id":search,"name" : search}
我在 LookUp 中使用 Aggregate 到 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);
});
环回不是您需要查看的地方。它只是一个具有通用 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 中发现更多信息。