在Mongo中使用正则表达式修改字段并将其添加到新字段

时间:2013-04-25 23:56:41

标签: regex mongodb

我是一个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循环的前景。有没有更好的方法来做到这一点,我没想到?

1 个答案:

答案 0 :(得分:0)

找出解决方法......

通过简单地编写输入url的修改来创建自己的各种版本,我能够在索引数据库上运行多个查询并连接结果。 Hacky但它​​有效!

相关问题