【问题标题】:Rails 4 + MongoDB + Search query LIKE does not give correct outputRails 4 + MongoDB + 搜索查询 LIKE 没有给出正确的输出
【发布时间】:2016-05-03 12:17:11
【问题描述】:

在 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)

没有得到正确的输出。

【问题讨论】:

    标签: ruby-on-rails-4 mongoid


    【解决方案1】:

    关于查询 1,您可以输出文档吗?我相信您在“名称”中的一条记录前面有一个字符,例如空格。我只是在本地运行相同的查询,它会拉回多条记录。

    试试这个: User.where(name/(.*)jo(.*)/i).count 看看会返回什么。它应该与 2 匹配。如果可行,那么您需要查看存储值的不正确之处。

    在查询 2 中,您在哪里看到过这种语法。 $where 期望执行一个 js 函数字符串来匹配记录。在您的情况下,要将文档中的任何字段与表达式匹配,您需要对每个文档中的每个字段执行递归函数。

    【讨论】:

      【解决方案2】:

      让查询 2 匹配所有字段 一种解决方案虽然效率低,但在 Rails 应用程序中而不是 Mongodb 查询中执行。

      例如 User.all.select do | user | user.attributes.values.grep(/^jo/i).any? end

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-18
        • 1970-01-01
        • 2019-03-07
        相关资源
        最近更新 更多