有没有办法可以直接在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::Cursor
是Enumerable
这样你就可以访问所有你平时的迭代的朋友,例如each
,first
,map
,和我个人的一个最爱,each_with_object
:
a = cursor.each_with_object([]) { |x, a| a.push(mangle(x)) }
Run Code Online (Sandbox Code Playgroud)
也有command
和eval
上的方法Mongo::DB
可能会做你想要什么.
归档时间: |
|
查看次数: |
7503 次 |
最近记录: |