满足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,不妨试试看。另外,如果有任何疏漏之处,请您指出,我将不胜感激。

广告
将在 10 秒后关闭
bannerAds