使用mongoid中的条件选择多个文档

时间:2016-04-14 17:59:51

标签: ruby-on-rails mongoid

我是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/

并且无法找到在一个查询中获取所有文档的示例。

1 个答案:

答案 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