如何直接在Ruby中激活原始MongoDB查询

有没有办法可以直接在Ruby中激活原始mongo查询而不是将它们转换为本机Ruby对象?

我浏览了Ruby Mongo教程,但我无法在任何地方找到这样的方法。

如果它是mysql,我会发出这样的查询。

ActiveRecord::Base.connection.execute("Select * from foo") 

我的mongo查询有点大,它在MongoDB控制台中正确执行。 我想要的是直接在Ruby代码中执行相同的内容。

这是一个(可能)更好的迷你教程,介绍如何直接进入MongoDB的内容。 这可能无法解决您的具体问题,但它应该让您到MongoDB版本的SELECT * FROM table


首先,你需要一个Mongo::Connection对象。 如果您正在使用MongoMapper,那么您可以在任何MongoMapper模型上调用connection类方法来获取连接或直接向MongoMapper询问:

 connection = YourMongoModel.connection connection = MongoMapper.connection 

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

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

 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表,所以你可以count它有多少东西或使用find查询它:

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

现在你拥有了你真正追求的东西:一个热门的Mongo::Cursor指向你感兴趣的数据Mongo::Cursor是一个Enumerable所以你可以访问所有你常用的迭代朋友作为eachfirstmap ,以及我个人的最爱之一, each_with_object

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

Mongo::DB上还有commandeval方法可以做你想要的。

如果你使用mongoid,你会在这里找到你的问题的答案。

如果您正在使用Mongoid 3,它可以轻松访问其MongoDB驱动程序: Moped 。 以下是访问一些原始数据而不使用模型访问数据的示例:

 db = Mongoid::Sessions.default # inserting a new document collection = db[:collection_name] collection.insert(name: 'my new document') # finding a document doc = collection.find(name: 'my new document').first # "select * from collection" collection.find.each do |document| puts document.inspect end