匹配mongodb中字段中的任何单词或部分单词

时间:2018-05-09 17:05:20

标签: ruby-on-rails mongodb

我在Rails中使用MongoDB和Mongoid ODM for MongoDB。我有一个名为name的字段,其中一个文档名称值为“John Paul Smith”。例如:

  

{“_ id”:ObjectId(“582bab8f9f26631b8a000088”),“name”:“JOHN PAUL   SMITH“,”电子邮件“:”“,”传真“:”“,......

我想找到关键字“John Smith”的文档。现在如果我用“JOHN PAUL SMITH”搜索它,它可以工作:

Contact.where(name: " John Paul Smith").first
# => #<Contact _id: 582fab8d9f26631605000054, created_at: 2016-11-19 01:31:57 UTC, ...

但如果我按名字和姓氏搜索,则不会产生结果:

 Contact.where(name: "John Smith").first
# => nil 

即使我使用名字和姓氏的一部分进行搜索,它也应该产生结果,如下所示:

Contact.where(name: "John Smith").first

目前,我正在使用以下搜索:

Contact.where({name: /.*#{condition}.*/i })

正如我上面所描述的,它并没有按照我的意愿行事。如何通过名字和姓氏或名字以及姓氏的一部分或名字或名字和中间名的一部分来搜索字段? (我接受MongoDB或Mongoid中的解决方案。我不一定需要Mongoid解决方案。我可以将MongoDB解决方案转换为Mongoid。)

2 个答案:

答案 0 :(得分:1)

不是一个很好的解决方案,但它有效:

"set-cookie": "[ \\"........\\" ]"

答案 1 :(得分:1)

您可以使用monogDB中的$ regex。

Collection.where(name: {'$regex': params[:search], '$options': 'i'})

它将返回类似于name string的所有数据。