满足Mongoid搜索条件的恰到好处的工具
首先
本文的目的是解决如何在mongoid中使用这样的搜索条件进行搜索的问题,触及到其他mongoid文章中没有涉及的部分,以满足读者的需求。虽然示例目前还很少,但预计会逐步更新。希望能对使用Ruby的人们在MongoDB方面提供帮助。
目录
-
- その1:件数を指定して取得したい場合
-
- その2:特定の条件を含めない結果が欲しい場合
- その3:特定のモデルとアソシエーションを組んでいるモデルがデータとして存在するかを判定したい場合
请确认一下基本事项。
Mongoid是一个类似于Rails中的ActiveRecord的gem,在处理MongoDB时提供了相似的体验。
执行环境
-
- MongoDBのバージョン : 3.2.11
- mongoidのバージョン : 4.0
请事先使用brew命令安装MongoDB。
-
- 特に何も指定せずに brew install mongodb でインストールすると最新版になるため、今回の記事のバージョンを指定する場合は、 brew install mongodb@3.2 という形でインストールすること
今回の場合は、特に指定しないでインストールしても問題ない( version 3.4.9 時点では動作検証済み)
$ brew install mongodb
搜索条件的各种设置
如果要指定数量进行获取。
- 例えば、ヒットする条件のうち20件だけを取得してみる
使用limit函数(整数)
# Rails consoleにて実施
# Userの作成日の降順で20件を取得
# ちなみに末尾の.to_aはmongoidのクエリを発行するためのメソッド
# .to_aと同様に.firstや.lastでもクエリが発行される
> users = User.order_by(:created_at => "desc").limit(20).to_a
=> [#<User _id: ユーザーID, created_at: 日付, updated_at: 日付]
# 20件が取得出来ている事を確認
> users.count
=> 20
- ActiveRecordのように User.last(20) のように最後の20件を取得みたいなことは出来ないので注意
# エラーになる
> User.last(20)
ArgumentError: wrong number of arguments (given 1, expected 0)
如果需要一个不包含特定条件的结果的话
- 例えば、hogeという名前じゃないユーザーを複数件取得したい
使用ModelName.nin(搜索条件)。
# Rails consoleにて実施
# nin は not inの意味
> users = User.nin(name: "hoge").limit(20).to_a
=> [#<User _id: ユーザーID, created_at: 日付, updated_at: 日付]
如果想要判断是否存在与特定模型和关联的模型作为数据,可以使用以下方法:
使用了哪个模型?
- 例1)userモデルがhas_manyでblogモデルを持っている場合(has_複数形?)
user.has_blogs?
=> true
- 例2)hogeモデルがhas_oneでfugaモデルを持っている場合(has_単数形?)
hoge.has_fuga?
=> true
总结
我觉得关于mongoid的搜索条件等内容的文章很少,所以我发表了这篇帖子。借此机会,如果您还没有使用过mongoid,不妨试试看。另外,如果有任何疏漏之处,请您指出,我将不胜感激。