从终端运行mongo index命令,获取非常大的索引的解决方案

时间:2013-07-15 21:06:33

标签: mongodb

我正在尝试在我的mongo实例上启用全文搜索,但我正在编制索引的集合非常大。通常,我打开mongo控制台并输入:

db.articles.ensureIndex({"text":"text"})

但是,我已经等了一个小时,想在一夜之间运行,所以我正在寻找像nohup命令那样运行的能力。

我知道我可以做一些事情:

mongo dbname --eval "db.articles.ensureIndex({'text':'text'})"

但即使将其改为:

nohup mongo dbname --eval "db.articles.ensureIndex({'text':'text'})" &

这仍然完全阻止了我的mongo使用。也就是说,

$ mongo
> show dbs

当其他工作在后台运行时超时 - 在索引时完全无法使用。有没有办法作为后台进程更有效地运行它,或者将index命令限制为只有这么多线程或什么?

更新 实际上,它比那更糟糕。运行这个索引命令似乎让我的mongo被阻止并完全陷入困境。非常非常大的指数,我认为。

1 个答案:

答案 0 :(得分:4)

您应该使用background选项。

db.collection.ensureIndex({ text: 'text', background: true })

来自mongodb的文档:

  

在后台构建索引,以便不构建索引   阻止其他数据库活动。

此处提供更多信息http://docs.mongodb.org/manual/reference/method/db.collection.ensureIndex/