【问题标题】:MongoMapper run simple MongoDB queriesMongoMapper 运行简单的 MongoDB 查询
【发布时间】:2011-11-03 14:13:05
【问题描述】:

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

如果我想模仿 ActiveRecord 模型的功能,MongoMapper 非常棒,但我的问题是是否可以通过 MongoMapper 运行简单的 MongoDB 查询,例如直接查询集合(即没有显式模型,其中包括字段等)还是我应该将 mongo gem 用于 ruby​​?

谢谢

【问题讨论】:

标签: ruby-on-rails ruby mongodb mongomapper


【解决方案1】:

我主要是从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 方法来实现:

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、first、map 和我个人最喜欢的一个 each_with_object:

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

【讨论】:

    猜你喜欢
    • 2023-03-16
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    相关资源
    最近更新 更多