MongoMapper运行简单的MongoDB查询

时间:2011-11-03 14:13:06

标签: ruby-on-rails ruby mongodb mongomapper

我正在运行Rails应用程序并使用MongoDB作为数据库存储。对于数据映射部分,我使用MongoMapper gem。

如果我想模仿ActiveRecord模型的功能,MongoMapper很棒,但我的问题是,是否可以通过MongoMapper运行简单的MongoDB查询,比如直接查询集合(即没有显式模型,包括字段等)或者我应该使用mongo gem for ruby​​?

谢谢

1 个答案:

答案 0 :(得分:0)

我主要是从How to fire raw MongoDB queries directly in Ruby

偷走了这个
connection = MongoMapper.connection

否则我猜你会使用from_uri构造函数来构建自己的连接。

然后你需要掌握一个数据库,你可以使用数组访问表示法,db方法,或直接从MongoMapper获取当前的数据库:

db = connection['database_name']    # This does not support options.
db = connection.db('database_name') # This does support options.
db = MongoMapper.database           # This should be configured like
                                # the rest of your app.

现在你手中有一个漂亮的Mongo :: DB实例。但是,您可能希望Collection能够执行任何有趣的操作,您可以使用数组访问表示法或集合方法来获取它:

collection = db['collection_name']
collection = db.collection('collection_name')

现在你的某些行为有点像SQL表,所以你可以计算它有多少东西或使用find查询它:

cursor = collection.find(:key => 'value')
cursor = collection.find({:key => 'value'}, :fields => ['just', 'these', 'fields'])

输出一行

cursor.each { |row| puts row } 

现在你已经拥有了你真正追求的东西:一个热门的烤箱Mongo :: Cursor指向你感兴趣的数据.Mongo :: Cursor是一个Enumerable,所以你可以访问你所有的平常迭代朋友,比如每个人,第一个,地图,以及我个人的最爱之一,each_with_object:

a = cursor.each_with_object([]) { |x, a| a.push(mangle(x)) }