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

bra*_*boy 13 ruby mongodb

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

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

如果它是mysql,我会发出类似这样的查询.

ActiveRecord::Base.connection.execute("Select * from foo")
Run Code Online (Sandbox Code Playgroud)

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

mu *_*ort 23

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


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

connection = YourMongoModel.connection
connection = MongoMapper.connection
Run Code Online (Sandbox Code Playgroud)

否则我猜你会使用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.
Run Code Online (Sandbox Code Playgroud)

现在你Mongo::DB手中有一个很好的闪亮实例.但是,你可能想要Collection做一些有趣的事情,你可以使用数组访问表示法或 collection方法:

collection = db['collection_name']
collection = db.collection('collection_name')
Run Code Online (Sandbox Code Playgroud)

现在你有一些行为类似于SQL表,所以你可以count使用它拥有多少东西或使用它来查询它find:

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

现在,你有你的真实意图:热出炉Mongo::Cursor .这点在你感兴趣的数据Mongo::CursorEnumerable这样你就可以访问所有你平时的迭代的朋友,例如each,first,map,和我个人的一个最爱,each_with_object:

a = cursor.each_with_object([]) { |x, a| a.push(mangle(x)) }
Run Code Online (Sandbox Code Playgroud)

也有commandeval上的方法Mongo::DB可能会做你想要什么.