我正在尝试获取不属于当前用户的所有卡,并且其标题包含一些关键字。
经过研究,到目前为止,我得到的是下面的代码。
@other_cards = Card.where(:user_id.ne => @temp_current_user, "title LIKE ?" => "%Business%").limit(10).order('created_at desc down_title asc')
但是,即使认为它们存在,也不会返回任何记录。
我还试图跳过:user_id条件以及所有限制和命令,导致此简单代码检查它是否会返回任何内容
@other_cards = Card.where("title LIKE ?", "%Business%")
编辑
我也尝试将条件作为第一个注释中建议的数组放置。也导致了错误
编辑2
附加在Rails控制台中运行查询的屏幕截图
答案 0 :(得分:1)
LIKE
语法是SQL的一部分。 MongoDB和Mongoid不(直接)支持SQL。一般的经验法则是将Ruby方法从ActiveRecord继承到Mongoid,例如以下对AR和Mongoid都适用:
Card.where(id: 123)
...但是一旦您开始在键或值中指定复杂条件,它们通常特定于您正在使用的数据库。在您提供的代码中,:user_id.ne
语法不会被ActiveRecord识别,而Mongoid / MongoDB无法识别title LIKE ?
。
您的问题陈述是:
我正在尝试获取所有不属于当前用户的卡,并且其标题包含一些关键字。
MongoDB具有本机全文搜索功能,这是尝试将关键字与正则表达式或SQL LIKE运算符进行匹配的高级解决方案。 MongoDB在全文搜索here方面有很好的文档。 Ruby驱动程序包含有关如何使用全文本搜索here的更多文档和示例。 Mongoid当前没有用于全文本搜索的文档(正在进行添加here的拉动请求),但要旨是将先前参考的驱动程序文档与文档here结合在一起以了解如何通常可以使用Mongoid中的索引。