2016-04-14 3 views
0

mongodbとmongoidを初めて使用しています。私はRuby のRailsでActiveRecord/mysqlに慣れていますので、私の無知を赦してください。私は特定の の基準を満たすすべてのレコード(特定郵便番号からの学生)を検索したい場合はActiveRecordの世界ではmongoidの基準を使用して複数の文書を選択する

することは、私は

students = Student.where(zipcode: "12345") 

を使用することができ、これは、学生の配列を返します。私は

Student.all.where(zipcode: "12345") 

を照会する場合Mongoidを使用して

は、それだけの基準を返し、私は

students = [] 
Student.all.where(zipcode: "12345").each { |s| students << s } 

のようなイテレータを使用する必要がありますにMongoid /モンゴクエリを行うには良い方法はありますrubyイテレータ(.each)を使用せずにすべてのドキュメント が検索基準を満たしていますか?

私は https://docs.mongodb.org/ecosystem/tutorial/mongoid-queries/

からmongoid文書を参照されていると、1つのクエリ内のすべての文書を取得する例を見つけることができませんでした。

答えて

0

あなたが考える場合は、コンソールにだまされている:

students = Student.where(zipcode: "12345") 

はあなたにstudentsStudentの配列を提供します。これは実際にstudentsに関係オブジェクトを与えますが、関係のinspect(コンソールによって呼び出されます)は、背中のデータベースからレコードを読み込みます。同様に、リレーションを持つarray-ishを実行しようとすると、データベースからレコードがロードされます。

Mongoidのwhereは同じように動作しますが、ActiveRecordリレーションと同じケースでインスタンスをモデル化する必要はありません。

(ActiveRecordのとMongoidの両方で)一番簡単な方法は、あなたが本当に配列をしたい場合は関係/基準にto_aを呼び出すことです。どちらの場合も

# ActiveRecord 
students = Student.where(zipcode: "12345")  # students is a relation 
students = Student.where(zipcode: "12345").all # students is still a relation 
students = Student.where(zipcode: "12345").to_a # students is now a real array 

# Mongoid 
students = Student.where(zipcode: "12345")  # students is a criteria 
students = Student.where(zipcode: "12345").all # students is still a criteria 
students = Student.where(zipcode: "12345").to_a # students is now a real array 

、あなたはちょうどその配列をしたい場合to_aを使って言います。

+0

説明をいただきありがとうございます - それは今や理にかなっています。また、Student.where(...)は条件を返し、変数に代入されるか反復されるまでクエリは実行されないことも学習しました。 – Kannan

関連する問題