Javascript 如何在Strongloop中使用正则表达式搜索mysql中的JSON数据
我已经在表中存储了JSON数据。我想基于userId获取数据,userId是Users对象的属性 示例:如果用户包含513,我希望获取所有记录 我的表格数据示例:Javascript 如何在Strongloop中使用正则表达式搜索mysql中的JSON数据,javascript,regex,node.js,loopbackjs,strongloop,Javascript,Regex,Node.js,Loopbackjs,Strongloop,我已经在表中存储了JSON数据。我想基于userId获取数据,userId是Users对象的属性 示例:如果用户包含513,我希望获取所有记录 我的表格数据示例: Table name:share Id name sharedusers 1 xxxx {"accessType":0,"permission":"1","specificUsers": [{"users":"502,512,513","per
Table name:share
Id name sharedusers
1 xxxx {"accessType":0,"permission":"1","specificUsers":
[{"users":"502,512,513","permission":"1"}]}
2 yyy {"accessType":0,"permission":"1","specificUsers":
[{"users":"47,52,60","permission":"1"}]}
3 zzzz {"accessType":0,"permission":"1","specificUsers":
[{"users":"502,512,513","permission":"1"}]}
我尝试在find()方法中执行以下查询,但不起作用
显示错误
在MySql中,我尝试了以下代码,它运行良好,但我不知道
如何在strongloop中执行相同的操作
Mysql版本:“5.6.27-log”当数据类型为if object时,Strongloop在子字段中为您做了一些工作,这会导致一些与您的情况类似的反直觉查询(但当您习惯于MongoDB/Postgres查询样式时非常直观) 你应该使用
{"where": {"sharedusers.users": {"regexp": "[^\"]*[[:<:]]513[[:>:]]" }}}
您可以将数据库存储更改为将用户
作为字符串数组:如果您使用支持JSON()的MySQL,速度会快得多,您可以执行以下操作:
{"where": {"sharedusers.users": "513" }}
那会快得多
编辑:在多次注释和问题更新后,我的答案无效,因为您正在为sharedusers字段使用字符串数据类型。您应该知道,此查询可能不会太快。它几乎肯定需要表扫描,因此表中的行数是线性的。@ChrisKitching我接受您的评论,但我们只有有限的记录。我尝试了这个{“where”:{“sharedusers.users”:{“regexp”:“[^\”]*[::]“}}}}但我得到的数组是空的。这是因为您的正则表达式不匹配,请尝试
/(513,|,513,| 513$)/
我尝试了内存存储和mysql。mysql返回错误“未知列”。内存存储返回空数组。你能提供示例应用程序吗?你能在问题中添加你的模型定义和使用的mysql版本吗?这样我就可以在我身边尝试使用相同的数据类型,同时在第一个字段中看到你的”用户“
而不是“用户”
,可能是它吗?
{
"name": "share",
"base": "PersistedModel",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {
"name": {
"type": "string"
},
"sharedusers": {
"type": "string"
}
},
"validations": [],
"relations": {},
"acls": [],
"methods": {}
}
{"where": {"sharedusers.users": {"regexp": "[^\"]*[[:<:]]513[[:>:]]" }}}
{"where": {"sharedusers.users": "/(513,|,513,|513$)/" }}
{"where": {"sharedusers.users": "513" }}