我是mongodb和mongoid的新手。我习惯使用Ruby中的ActiveRecord / mysql 在Rails上如此宽恕我的无知。
在ActiveRecord世界中,如果我想搜索满足某个特定记录的所有记录 标准(来自特定邮政编码的学生),我可以使用
students = Student.where(zipcode: "12345")
这将返回一系列学生。
使用Mongoid,如果我查询
Student.all.where(zipcode: "12345")
它只返回一个标准,我必须使用像
这样的迭代器students = []
Student.all.where(zipcode: "12345").each { |s| students << s }
是否有更好的方法来执行Mongoid / Mongo查询以获取所有文档 在不使用ruby迭代器(.each)的情况下满足搜索条件?
我一直指的是来自的mongoid文件 https://docs.mongodb.org/ecosystem/tutorial/mongoid-queries/
并且无法找到在一个查询中获取所有文档的示例。
答案 0 :(得分:0)
如果你认为你被控制台愚弄了:
students = Student.where(zipcode: "12345")
在Student
中为您提供了students
个数组。这实际上在students
中为您提供了一个关系对象,但关系的inspect
(由控制台调用)将从您背后的数据库中加载记录;同样,只要你尝试使用关系做任何数组,它就会从数据库中加载记录。
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
。