使用loopback API时,' AND'操作员多余的'其中'过滤多种条件? 例如,我测试了以下两个查询,它们返回相同的结果:
<model>.find({ where: { <condition1>, <condition2> } });
<model>.find({ where: { and: [<condition1>, <condtion2>] } });
更具体地说,假设这是表格内容:
name value
---- -----
a 1
b 2
当我执行&#39; find()&#39;使用两个不同的&#39;其中&#39;过滤器,我在两种情况下都获得了第一条记录:
{ where: { name: 'a', value: 1 } }
{ where: { and: [ { name: 'a'}, { value: 1 } ] } }
我已经阅读了API文档,但在有多个条件时没有找到使用的逻辑运算符。 如果&#39; AND&#39;如我的测试所示是多余的,我不喜欢使用它。但我只是想确定一般情况下这是否正确,或者它恰好适用于我正在使用的postgreSQL。
答案 0 :(得分:0)
这是一个有效的查询,只能使用和语句完成。
{
"where": {
"or": [
{"and": [{"classification": "adn"}, {"series": "2"}]},
{"series": "3"}
]
}
}
编辑:https://github.com/strongloop/loopback-filters/blob/master/index.js
function matchesFilter(obj, filter) {
var where = filter.where;
var pass = true;
var keys = Object.keys(where);
keys.forEach(function(key) {
if (key === 'and' || key === 'or') {
if (Array.isArray(where[key])) {
if (key === 'and') {
pass = where[key].every(function(cond) {
return applyFilter({where: cond})(obj);
});
return pass;
}
if (key === 'or') {
pass = where[key].some(function(cond) {
return applyFilter({where: cond})(obj);
});
return pass;
}
}
}
if (!test(where[key], getValue(obj, key))) {
pass = false;
}
});
return pass;
}
它遍历查找失败的where
对象的键,因此它就像你的情况中的隐式and
语句一样。
loopback数据源juggler包含使用隐式and
格式
{PictureLink.findOne({where: {pictureId: anotherPicture.id, imageableType: 'Article'}},
{pictureId: anotherPicture.id, imageableId: article.id, imageableType: 'Article',}
答案 1 :(得分:0)
但我只是想确定一般情况下这是否属实,或者它是否恰好适用于我正在使用的postgreSQL。
总的来说是真的吗?否。
似乎这是在SQLConnector
中为PostgreSQL和MySQL(可能还有其他SQL数据库)处理的。因此,不使用SQLConnector
(例如MongoDB)的连接器可能不支持此功能。但是,鉴于我在网上看过很多例子,我认为假设其他连接器也以这种方式实现它也是安全的。