问题描述
我的内容模型如下:
{
"name": "content","base": "PersistedModel","idInjection": true,"options": {
"validateUpsert": true
},"properties": {
"id": {
"type": "number"
},"url": {
"type": "string","required": false
},"data": {
"type": "Object","required": true
}
},"validations": [],"relations": {},"acls": [
{
"accesstype": "WRITE","principalType": "ROLE","principalId": "$authenticated","permission": "ALLOW"
},{
"accesstype": "READ","principalId": "$everyone","permission": "ALLOW"
}
],"methods": {}
MysqL中此数据的示例如下所示:
我尝试使用REST和Node API来查询此数据,但无法通过“数据”数据库字段内部的任何嵌套对象字段进行查询。一些不起作用的示例:
contentModel.findOne({ where: { "data.url": url } },function (
err,content
) {
if (err) {
console.log(err);
}
console.log("find:",content);
});
const filter = encodeURI(`{"where":{"systemid":"${contentType}"}}`);
let url = `${apiUrl}contentTypes?filter=${filter}`;
let contentTypeRecord = await this.getAxios().get(url);
我还在回送用户界面ui中尝试了许多查询。我通常没有结果,或者它返回了所有的内容记录。
但是,如果我在MongoDb中设置了相同的数据,则上述数据访问尝试会起作用。
我在做什么错?回送大概应该是在数据字段中解析对象,并允许我对其进行过滤。
解决方法
AFAIK,LoopBack不支持对嵌套属性的查询过滤器。根据{{3}},在PostgreSQL和MongoDB连接器中支持有限:
您会从线程中看到@michelgokan:
- 有this comment
- Mongo也有一些基本支持(仅适用于点嵌套属性)
- 由于LTS中具有环回3,并且不再接受新功能PR,因此不会将其他支持添加到其他RDB连接器中
- Loopback 3将于2019年底结束LTS,因此添加的可能性更低。
选项是:
- 自己编写自定义SQL作为自定义端点
- 为some support in postgres connector或Knex之类的具有支持性(任务繁重)的事物创建备用连接器
- 在内存中进行过滤
- 将json用于嵌套数据,以便在诸如mongo或postgres之类的点中使用点查询
- 接下来要环回,这可能会在将来增加支持
MySQL似乎支持查询JSON数据,请参见Bookshelf,因此应该可以在loopback-connector-mysql
中实现此功能。随时在docs for JSON_CONTAINS
中打开问题。拉取请求会更好! ❤️