有什么办法可以直接在
Ruby中触发原始的mongo查询,而不是将它们转换为本地的Ruby对象?
我经历了Ruby Mongo教程,但是我无法找到这样的方法.
ActiveRecord::Base.connection.execute("Select * from foo")
解决方法
这是一个(可能)更好的迷你教程,如何直接进入MongoDB的勇气.这可能无法解决您的具体问题,但它应该让您远远超过MongoDB版本的SELECT * FROM表.
首先,您将需要一个Mongo::Connection
对象.如果
您正在使用MongoMapper,那么您可以调用连接
任何MongoMapper模型上的类方法来获取连接
或直接询问MongoMapper:
connection = YourMongoModel.connection connection = MongoMapper.connection
否则我想你会使用from_uri
构造函数来构建
你自己的连接.
那么你需要把你的手放在一个数据库上,你可以这样做
使用array access notation,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
方法:
collection = db['collection_name'] collection = db.collection('collection_name')
现在你有一些类似于sql表的行为
您可以使用find
count
有多少内容或查询?
cursor = collection.find(:key => 'value') cursor = collection.find({:key => 'value'},:fields => ['just','these','fields']) # etc.
现在你有什么你真正的以后:一个热的烤箱Mongo::Cursor
指向您感兴趣的数据.Mongo :: Cursor是
一个Enumerable
,所以你可以访问所有你通常的迭代
朋友如each
,first
,map
和我个人之一
收藏,each_with_object
:
a = cursor.each_with_object([]) { |x,a| a.push(mangle(x)) }