我现在使用loopback
作为后端,希望能够搜索表中的所有字段
例如,采用以下表格字段:
id, name, title, created, updated
现在说我想使用以下字符串“ nomad
”在表中进行搜索
但是,我不确定如何构造查询
我尝试过:
{"where": {"keywords": {"inq": ["nomad"]}}}
但是,这只会返回所有结果
那我该怎么做呢? :)
如果很重要,我的数据库是postgresql
答案 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 data,Loopback Where filter和postgresql RETURN QUERY中发现更多内容。