在Rails中,我试图通过提供正则表达式来使用LIKE查询从mongodb获取数据,但即使没有得到正确的输出。
模特:用户
_id, name, display_name, age, address, nick_name
a1, Johny, Johny K, 12, New York, John
b1, James, James Waltor, 15, New York, James
c1, Joshua, Joshua T, 13, California, Josh
现在我有3组记录。
查询1:搜索具有' Jo'作为初始名称中的关键字
User.where(name: /^jo/i)
输出 - 只有一条记录 - 而不是两条。
查询2: - 将文本与所有列值匹配
User.where($where: /^jo/i)
没有得到正确的输出。
答案 0 :(得分:0)
在查询1上确定,您可以输出文件吗?我相信你在'name'中的一个记录在它前面有一个字符,例如空格。我只是在本地运行相同的查询,它将多条记录拉回来。
试试这个:
User.where(name/(.*)jo(.*)/i).count
并查看返回的内容。它应匹配2.如果可行,那么您需要查看商店值的不正确之处。
在查询2中,您在哪里看到了这种语法。期待$where执行js函数的字符串以匹配记录。在您的情况下,要将文档中的任何字段与表达式匹配,您需要在每个文档中的每个字段上执行递归函数。
答案 1 :(得分:0)
使查询2与所有字段匹配 一种解决方案,虽然效率低,但是在Rails应用程序中而不是Mongodb查询中执行。
e.g。
User.all.select do | user | user.attributes.values.grep(/^jo/i).any? end