我是一个mongo noob,我希望这是一个非常简单的问题。我昨天收到了一个100GB的.bson文件,需要快速检索一些与网址相关的文件。不幸的是,管理数据库的人决定在其生命中途改变存储URL的模式。这意味着必须通过正则表达式查询url字段,并且无法编制索引。
我希望这样做:在两个版本的url之间输出一些常见字符串并将其存储在名为url_id
的新字段中。然后可以将该字段编入索引以便更快地进行查询。通过一些过去的SO帖子,我拼凑了一些伪代码可以解决这个问题:
//pseudo code, i dont know javascript that well.
db.eval(function() {
db.foo.find({}, {url:1}).forEach(function(e) {
match = e.url.match(/.*(domain.com/.*)?(\\?.*)/); //remove http, www, and query strings
e.url_id = matches[1];
db.foo.save(e);
});
});
然后我可以跑:
db.foo.ensureIndex({url_id:1})
只要我在查询网址之前正确修改了网址,就可以创建一个更快查询的新索引。
然而,我害怕在100gb记录中运行for循环的前景。有没有更好的方法来做到这一点,我没想到?
答案 0 :(得分:0)
找出解决方法......
通过简单地编写输入url的修改来创建自己的各种版本,我能够在索引数据库上运行多个查询并连接结果。 Hacky但它有效!