【发布时间】:2016-09-07 02:17:29
【问题描述】:
我有一个简单的目的地 API。它是使用 Express 构建的,并使用 MySQL 数据库进行续集。 它有城市、国家和地区。城市属于国家,国家属于地区。
现在,我通常必须执行复杂的查找操作。例如:
获取/城市
{
where: {
name: {'$like': 'bue%'}
},
include: [{model: Country, where: {region_id: 1}}]
}
有了这个,我试图获取名称以“bue”开头的所有城市,但只有其国家/地区的 region_id 为 1。 如果我指定要返回的字段,这可能会向前迈出一步。模型有一些我可能不需要的文本字段,所以上面的查询变成:
{
where: {
name: {'$like': 'bue%'}
},
attributes: ['id', 'name'],
include: [{
model: Country,
attributes: ['id', 'name'],
where: {region_id: 1}
}]
}
这已经很复杂了。如果我想包含国家/地区的区域并在那里添加一些过滤器,请使用图片。
所以,我的问题是:我该如何传递这个复杂的查询? 现在我正在使用带有编码 json 的 url 参数。所以我有类似的东西:
where: {name: {'$like': 'bue%'}} => Becomes:
/cities?where=%7Bname%3A%20%7B%27%24like%27%3A%20%27bue%25%27%7D%7D
您可以看到,这会导致一个非常难处理的丑陋 URL。如果我的查询很复杂,那么 URL 就会变成怪物。如果我的 where 参数为 OR / AND 和复杂的条件,它会变得非常庞大和混乱。
无论如何,这就是问题所在。我应该保持原样吗?有没有更合适的方法来做到这一点。 一些例子将不胜感激。
【问题讨论】: