mongodb更新了100万条记录

时间:2014-06-10 22:29:07

标签: mongodb mongodb-update

我有一个包含100万份文件的集合。每个文档都有一个ip字段。我有一个节点功能,它可以通过传递ip作为其参数来返回国家代码。我打算获取所有记录,运行我的节点功能,将返回的国家/地区名称插回到文档中。并立即更新它们。但是,mongodb对16M数据有限制。

{
    _id: xxxxx,
    ip: '207.97.227.239'
}

{
    _id: xxxxx,
    ip: '207.97.227.239',
    country_abbr: 'US'
}

我的问题是如何安全快速地更新这100万条记录。

2 个答案:

答案 0 :(得分:1)

我假设您将根据country_abbr的值设置ip字段。所以我认为您需要一个检查ip的更新命令并设置country_abbr的值。这就是你应该这样做的方式:

db.collection.update (
    {ip : condition_for_ip},
    {$set : {country_abbr : desired_value}},
    {multi : true}
);

您需要多次运行此查询才能涵盖收藏中的所有国家/地区。

要检查您的收藏中是否还有一些文档没有country_abbr的任何值,您可以运行以下查询:

db.collection.find({'country_abbr' : {$exists : false}});

如果以上书面查找查询返回任何文档,您可以阅读ip并查看需要添加的国家/地区。

澄清后编辑:

返回的文档太大,在您的情况下超过了16MB的限制。所以你所做的就是你只获取ip并将它们全部存储在一个链表中。然后,您遍历列表并使用您拥有的神奇node函数,您将获得正确的country_abbr值。最后,您按照上面的方式发布一个简单的更新。

为了概括我对每个人的回答,而不是提出此问题的人所具有的功能,您可以进行手动输入或任何您想要的操作,并为上面的更新命令提供country_abbr值。

答案 1 :(得分:0)