MongoDB / mongoid update_attributes方法慢吗?

时间:2011-08-09 15:41:04

标签: ruby-on-rails mongodb mongoid

我有一些代码需要更新mongoDB数据库中的记录。所以我先找到记录,然后更新记录。但是,记录中存储了大量的文本数据,因此我不想在收回整个文档时检索整个文档。足以让我更新它。我想如果我在mongoid中使用“only(...)”方法,那将只返回该属性。但是,这些查询似乎运行得很慢,所以我不确定它们是否正在完成我认为它们正在完成的任务。

d = Document.only(:title).find(title) # using 'title' as key in mongoDB
d.update_attributes({ author: "author_name" })

是否有更快的方法来执行此期望的查询?

2 个答案:

答案 0 :(得分:0)

我有一个想法是你可以将集合分成两个集合:一个具有文本元数据(name,author,yearPublished,numPages等),另一个具有外键(可能只是是MongoDB的_id)和文本本身。然后你可以在较小的集合上修改作者姓名之类的东西,我相信它会表现得更快......我想是要测试的东西。但是,我认为你的速度问题是由于记录的大小。我个人注意到,从没有很多属性的简单测试数据集到每个记录有很多属性的真实数据集,性能显着下降。

答案 1 :(得分:0)

MongoDB提供了许多高度优化的修改器操作。查看使用$set操作只设置一个键而不必处理文档的其余部分。您还可以在单​​个操作中执行更新和查询。使用指定的author更新所有记录的title的本机MongoDB查询将如下所示:

var title = "The Title"
db.documents.update( { title: title }, { $set: { author: "The Author" } } )

希望您能找到通过Mongoid传递该查询的方法。如果没有,您可以直接转到本机Mongo适配器来运行它。有关详细信息,请参阅docs on modifier operations